iPhone 中的 Sqlite3 数据库被锁定 - 如何避免?

2024-01-18

我有一个在 Sqlite3 DB 上执行搜索的查询。它除了使用阅读器进行阅读之外什么也不做。 对于每个找到的匹配项,它都会调用 UI 回调来更新结果视图。

当此搜索运行时,我点击了 UI 中的一个按钮,该按钮将在新线程中执行一些其他操作。最后它应该删除搜索控制器的视图并显示一个新的控制器。

但是,在某些时候触发的操作想要写入数据库。它就挂在那里,最终我会看到数据库被锁定的异常。

有趣的是,搜索阅读器也不会继续,这是一个僵局。

我是否必须以某种特殊方式打开数据库才能支持多线程使用?连接的构造函数是什么?


MonoTouch 5.1+ 提供了API https://github.com/mono/mono/commit/94edf31d65970e722d58340bd32f1ff642c53b7e让您选择要与 SQLite 一起使用的线程模型。

SqliteConnection.SetConfig (SQLiteConfig.MultiThread);

这映射到一些连接options http://www.sqlite.org/c3ref/c_config_getmalloc.htmlSQLite 库。

UPDATE:如果您使用的是早期版本的 MonoTouch(例如 4.2 和 5.0.x 之间),您可以使用错误报告中附加的二进制文件#652 http://bugzilla.xamarin.com/show_bug.cgi?id=652(按照说明操作)或将补丁(p/invoke 和 enum)复制粘贴到您自己的应用程序中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone 中的 Sqlite3 数据库被锁定 - 如何避免? 的相关文章

随机推荐