objective-c - sqlite 未关闭的读取事务

标签 objective-c ios database multithreading sqlite

我在 iOS 应用程序中使用 sqlite3,我多次遇到一个非常奇怪的问题 次。

我正在使用 WAL,我所有的写入都发生在一个托管线程上,该线程一次只允许 1 个操作,我的读取使用不同的数据库句柄,一切正常。我看到的问题是有时我的读取句柄会进入这种无法读取已提交数据的怪异状态。就像它有一个未提交的读取事务...

我可以成功地写入数据库并将结果导出到我的计算机,在那里我可以看到新写入的结果。但是,我的读取似乎是在较早的时间点访问数据库……就像它们被卡住了一样。如果我关闭应用程序并重新打开它,它们会很好并且会读取新提交的数据,但我想知道我的应用程序是如何卡在这种状态的。

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

我遇到了完全相同的问题,但在 Debian Lenny(内核 2.6.33)w/SQLite3 3.7.7.1 上。

事实证明,在我删除并重新创建数据库文件后,我有一些进程卡在一些陈旧的数据库文件描述符上。

我通过确保在再次重新创建数据库之前终止所有使用该数据库的进程来修复它。

通过摆脱旧进程,文件句柄也被删除。

关于objective-c - sqlite 未关闭的读取事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647936/

相关文章:

ios - 如何在 AVPlayer 中提取 MPMediaItemCollection 到 NSData?

ios - FBSDKLoginManager 注销和登录管理

ios - 如何修复 UICollectionView 单元格中的 fatal error ?

android - 为网站和移动应用程序创建数据库

ios - 尝试调整大小和图像时实例化类方法问题

ios - 每次我单击搜索栏时,ios应用程序崩溃,同时从parse.com中检索数据

ios - 修复 UITableView 中第一行的纵横比

ios - SKStoreProductViewController 显示来自开发者的应用程序

mysql - 我需要停止重复 Mysql 多对多关系中的行

database - 将 Azure 上的数据库数据复制到 Azure 上的另一个数据库中