1
我正在开发一个使用sqlite的iOS应用程序。这是一个非常以数据为中心的应用程序,所以我创建了一个名为prepareQuery的函数。我不会多次访问数据库,所以cmd是全球性的,并且工作得很好。sqlite_finalize不释放数据库锁定
-(BOOL) prepareQuery:(NSString *) query
{
const char *dbPath = [databasePath UTF8String];
if (sqlite3_open(dbPath, &db) == SQLITE_OK)
{
const char *query_stmt = [query UTF8String];
if (sqlite3_prepare_v2(db, query_stmt, -1, &cmd, NULL) == SQLITE_OK)
return YES;
}
return NO;
}
现在我有以下(编辑以可读性)
[self prepareQuery:@"SELECT STATEMENT FOR TABLE 1;"];
NSLog(@"Result: %i", sqlite3_step(cmd));
//Work with the 1st query
sqlite3_finalize(cmd);
[self prepareQuery:@"SELECT STATEMENT FOR TABLE 2;"]];
NSLog(@"Result: %i", sqlite3_step(cmd));
//Work with the 2nd query
sqlite3_finalize(cmd);
if ([self prepareQuery:@"INSERT STATEMENT FOR TABLE 1;"])
NSLog(@"Result: %i", sqlite3_step(cmd));
else
NSLog(@"error preparing statement");
我得到以下输出:
Result: 100
Result: 100
Result: 5
这不是第一个程序我已经在那里我”我跑了多个选择,然后做了一个插入。任何想法为什么最后的结果是SQLITE_BUSY?我试过关闭数据库,并将cmd设置为零。
如果您的数据库处于WAL模式,写操作不会块读取,但会阻止其他写入,因此可能是原因。 – 2014-09-25 18:21:56