我有一个 View ,我在后台线程中将数据插入到来自服务器的 sqlite 数据库。现在,当用户点击并导航到另一个 View 时,我必须从该数据库中读取内容,但我无法获取内容,因为数据库已经在最后一个 View 的后台线程中打开并且它给出错误“数据库已锁定”。
注意:这两个操作都在不同的表中,即我在不同的表中写入并从其他表中读取。
sqlite 是否支持多线程,如果是,那么如何从数据库中删除锁?
最佳答案
SQLite 支持多线程。您可以在线程之间共享您的连接句柄/对象,它们会很好地同步他们的访问。
编辑:通过 sqlite3
对象(sqlite3_open()
作为第二个参数返回的那个)到线程,而不是在线程中重新打开数据库。像这样的东西:
sqlite3 *MyDatabase; //Initialized somewhere
NSArray *DataForThread = [NSArray arrayWithObjects:
request,
[NSValue valueWithPointer: MyDatabase],
nil];
[self performSelectorInBackground:@selector(processResponseInBackground:) withObject:DataForThread];
在线程内部,像这样恢复 SQLite3 对象:
sqlite3 *MyDatabase = [[ThreadData objectAtIndex:1] pointerValue];
关于iphone - 在objective-C中同步sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006573/