我正在为 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;
}