我希望一切顺利,我对sqlite有一个疑问。 是否有可能两个不同的sqlite表访问一个。 恩。 我有表A ans B。可以同时访问A和B.插入更新表值。
我在myDatabase中有两个不同的表,Table1和table2(test_db.sqlite)。
表1仅供主线程访问。 表2将仅由后台线程访问。
现在让c。 我已经使用后台线程打开数据库连接...用于将值插入table2。 将值插入table2时............。my主线程尝试同时打开同一个数据库连接,从表1中检索数据......然后应用程序崩溃。
如何同时打开相同的数据库连接。
请检查此编辑
答案 0 :(得分:0)
[编辑]
通过在不同的线程中访问数据库会遇到问题。您可以使用线程安全模式来解决此问题。
来自SQL docs:
SQLite支持三种不同的线程模式:
单螺纹。在此模式下,所有互斥锁都被禁用,并且SQLite一次不能在多个线程中使用。
多线程。在这种模式下,多个线程可以安全地使用SQLite,前提是在两个或多个线程中不同时使用单个数据库连接。
序列化。在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制。
因此,您可以使用SQLITE_THREADSAFE
编译时参数来选择线程模式。
我建议您在每个线程中打开一个不同的数据库连接,或者在序列化模式下重建SQLite(使用SQLITE_THREADSAFE = 1)。
如果您未提供收到的确切错误,则很难回答您的问题。但是,假设你的查询没问题,最可能的原因是你没有正确处理你的sqlite流。
我认为您的问题是您正在更新表“A”,然后在尝试更新表“B”时它会崩溃。这就是为什么你要创建一个查询来更新它们的原因。
因此,在重新使用sqlite3_stmt
进行第二次查询之前,首先应调用sqlite3_finalize(yourStatement)
从内存中释放语句,然后,如果要进行第二次查询,则调用再次sqlite3_prepare_v2
,因此数据库已准备好接受下一个查询。