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