0

私は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;
}
4

0 に答える 0