gpt4 book ai didi

ios - Sqlite 数据库锁定错误 - iOS

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:31 25 4
gpt4 key购买 nike

我正在使用 sqlite 在 TableView 中插入和更新数据。我只能更新一次数据,在下一次尝试时它显示数据库已锁定。即使正在关闭数据库,请帮忙。下面是代码。

-(void)saveUserCredential: (NSString *)email :(NSString *)userName :(NSString *)loginTime :(NSString *)source
{
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat:@"yyyy-MM-dd HH:mm"]; // Date formater
NSString *todayDate = [dateformate stringFromDate:[NSDate date]];

const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString * query = @"SELECT * from users";
int rc =sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL);
if(rc == SQLITE_OK)
{
if(sqlite3_step(statement) == SQLITE_ROW)
{

NSString *updateSQL = [NSString stringWithFormat:@"update users set email = '%@', username = '%@', source = '%@', created = '%@' where id = '%d'",email, userName, source, todayDate,1];

const char *update_stmt = [updateSQL UTF8String];
sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL );
//sqlite3_bind_int(statement, 1, 1);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"successfully updated");
}
else{

NSLog(@"Error while updating. '%s'", sqlite3_errmsg(database));
}

}
else
{
NSString *insertSQL = [NSString stringWithFormat:@"insert into users (email,username,source,created) values('%@','%@','%@','%@')",email,userName,source,todayDate];

NSLog(@"INS SQL: %@", insertSQL);
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"INSERTED");
}
else
{
NSLog(@"NOT INSERTED");
}
NSLog(@"hello ");

}
sqlite3_finalize(statement);
sqlite3_close(database);

}

}

}

最佳答案

你需要打电话

sqlite3_finalize(statement);

对于每个成功的 sqlite_prepare_v2 调用。它应该是平衡的。还为每个查询使用不同的 sqlite3_stmt

因此您的代码需要更改为:

const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString * query = @"SELECT * from users";
int rc =sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL);
if(rc == SQLITE_OK)
{
if(sqlite3_step(statement) == SQLITE_ROW)
{

NSString *updateSQL = [NSString stringWithFormat:@"update users set email = '%@', username = '%@', source = '%@', created = '%@' where id = '%d'",email, userName, source, todayDate,1];

const char *update_stmt = [updateSQL UTF8String];
sqlite3_stmt *upStmt;
sqlite3_prepare_v2(database, update_stmt, -1, &upStmt, NULL );
//sqlite3_bind_int(upStmt, 1, 1);
if (sqlite3_step(upStmt) == SQLITE_DONE)
{
NSLog(@"successfully updated");
}
else
{

NSLog(@"Error while updating. '%s'", sqlite3_errmsg(database));
}
sqlite3_finalize(upStmt);
}
else
{
NSString *insertSQL = [NSString stringWithFormat:@"insert into users (email,username,source,created) values('%@','%@','%@','%@')",email,userName,source,todayDate];

NSLog(@"INS SQL: %@", insertSQL);
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_stmt *inStmt;
sqlite3_prepare_v2(database, insert_stmt,-1, &inStmt, NULL);
if (sqlite3_step(inStmt) == SQLITE_DONE)
{
NSLog(@"INSERTED");
}
else
{
NSLog(@"NOT INSERTED");
}
NSLog(@"hello ");
sqlite3_finalize(inStmt);

}
sqlite3_finalize(statement);
sqlite3_close(database);

}

}

关于ios - Sqlite 数据库锁定错误 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com