私はiPad用のアプリを開発しており、sqlite文(選択、更新、挿入、削除)を使用しています。
各文の最初にデータベースを開き (sqlite3_open)、最後にデータベースを閉じます (sqlite3_close)。しかし、「データベースがロックされています」というメッセージが表示されることがあります。
これを解決するために何ができるかわかりません。
-(BOOL )executeInsertQuery:(NSString *)query
{
[self copyIfDbNeeded];
BOOL returnValue = YES;
sqlite3_stmt *insertStmt = nil;
databaseDB = nil;
if (sqlite3_config(SQLITE_CONFIG_SERIALIZED) == SQLITE_OK)
{
NSLog(@"Can now use sqlite on multiple threads, using the same connection");
}
int ret = sqlite3_enable_shared_cache(1);
if(ret != SQLITE_OK)
{
NSLog(@"Not Shared");
}
if (sqlite3_open([self writableDBPath], &databaseDB) == SQLITE_OK) {
if(insertStmt == nil)
{
const char *sql = [query UTF8String];
if(sqlite3_prepare_v2(databaseDB, sql, -1, &insertStmt, NULL) != SQLITE_OK)
{
NSLog(@"databaseDB Error while creating addStmt in addRecipeToDatabase %@", [NSString stringWithUTF8String:(char *)sqlite3_errmsg(databaseDB)]);
returnValue = NO;
}
}
if(SQLITE_DONE != sqlite3_step(insertStmt))// Execute sqlite statement.
{
NSLog(@" databaseDB Error while Executing addStmt in addRecipeToDatabase %@", [NSString stringWithUTF8String:(char *)sqlite3_errmsg(databaseDB)]);
returnValue = NO;
}
sqlite3_reset(insertStmt);// reseting statement.
if (insertStmt)
{
sqlite3_finalize(insertStmt);// finalizing statement.
insertStmt = nil;
}
}
sqlite3_close(databaseDB);
return returnValue;
}