【发布时间】:2011-10-17 15:26:45
【问题描述】:
随着 iOS 5 的发布,我们在为 sqlite 数据库设置序列化选项时遇到越来越多的错误(因此它的保存用于多线程)。我们在 sqlite3_config 上收到 SQLITE_MISUSE 错误代码。有人注意到这种奇怪的行为吗?有人知道我该如何解决这个问题吗?它在以前的 iOS 版本上运行良好。
代码如下:
- (sqlite3 *)getNewDBConnection {
NSLog(@"sqlite3 lib version: %s", sqlite3_libversion());
//sqlite3_config() has to be called before any sqlite3_open calls.
if (sqlite3_threadsafe() > 0) {
int retCode = sqlite3_config(SQLITE_CONFIG_SERIALIZED);
if (retCode == SQLITE_OK) {
NSLog(@"Can now use sqlite on multiple threads, using the same connection");
} else {
NSLog(@"setting sqlite thread safe mode to serialized failed!!! return code: %d", retCode);
}
} else {
NSLog(@"Your SQLite database is not compiled to be threadsafe.");
}
sqlite3 *newDBconnection;
// Open the database
if (sqlite3_open([[self getDatabaseFilePath] UTF8String], &newDBconnection) == SQLITE_OK) {
NSLog(@"Database Successfully Opened :)");
} else {
sqlite3_close(newDBconnection);
NSLog(@"Error in opening database :(");
}
return newDBconnection;
}
这是输出:
sqlite3 lib version: 3.7.7
setting sqlite thread safe mode to serialized failed!!! return code: 21
Database Successfully Opened :)
【问题讨论】:
-
我遇到了同样的问题,在 sqlite3_config() 之后调用 sqlite3_initialize() 并不能解决问题。对 config() 的调用仍然返回 SQLITE_MISUSE(代码 21)。任何人都能够解决这个问题?