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