我正在为 ipad 开发一个应用程序,我正在使用 sqlite 语句(选择、更新、插入、删除)。
我在每句话开头打开(sqlite3_open)数据库,在结尾关闭(sqlite3_close)。但有时我会收到“数据库已锁定”消息。
我不知道我能做些什么来解决这个问题。
感谢并抱歉提供这么少的信息。
最佳答案
如果我没记错的话,sqllite 的问题是你一次只能访问它一次。 如果你有多个线程,你可以在这种情况下运行。示例:
在线程 t1 上运行方法 1(访问数据库)。 x 秒后在线程 t2 上运行方法 2(访问数据库)。
如果 method1 在那些 x 秒内没有完成,两个方法将同时访问它。 而且,正如我所说,我知道 sqllite 不支持这一点。
您应该尝试标记您的数据库的使用情况,如果您想访问它但它正在使用中,请在 x 秒后重试。像这样:
- (void) generalMethodThatUsesDatabses
{
if(databaseIsUsed)
{
[self performSelector:@selector(generalMethodThatUsesDatabses) withObject:nil afterDelay:5];
return;
}
databaseIsUsed = TRUE; //global bool variable
//your code here
databaseIsUsed = FALSE;
}
希望这对您有所帮助。干杯!
关于ios - sqlite3 - iOS - 数据库被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929104/