我正在使用sqlite开发iOS应用程序。这是一个非常以数据为中心的应用程序,因此我创建了一个名为prepareQuery的函数。我多次都不会访问数据库,因此cmd是全球性的,并且运行良好。
-(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设置为nil。
答案 0 :(得分:1)
我发现了这个问题(我知道只要我点击帖子就会发生这种情况......)
我发布的代码是从不同的程序调用的。除了一个之外,其中的所有15个陈述都已定稿。我最终确定了一个并且它有效。我不明白为什么我可以运行7次选择,1次更新,7次选择而没有最终确定#4但是在第2次程序中出错了...