我已经阅读了一些教程并做了一些搜索,但我必须遗漏一些东西。 最近几天我在我的iphone应用程序上遇到了一些不同的sqlite问题。 当我在不同的表上同时进行插入时,最常见的问题是崩溃,而不是在同一个表上。
顺便说一句,我可以使用线程实现几个插入,所以我确信有并发性。
db也会锁定整个数据库,还是只是将信息插入到表中?
我也在研究可能导致崩溃的另一个可能的问题,但这些小信息会有很大帮助。
答案 0 :(得分:1)
经过进一步测试后,我可以肯定地说,只要数据库位于不同的表中,就可以在数据库中同时执行多次插入。在同一个表上同时多次插入会引发错误。 我之前遇到的崩溃似乎与以下事实有关:我是init +在我想要使用它的每个视图上分配db然后在每个视图上释放它。 在init + alloc之后,它只在app委托上解决了崩溃问题。 虽然您可以在整个应用程序中拥有同一个数据库的多个实例,但最好只在App Delegate中拥有一个并根据需要访问它。 这可能不完全正确,但经过几个小时的搜索和测试后得出了我的结论。
我希望这有助于其他人。
答案 1 :(得分:0)
有5种类型的锁,但都与整个database file相关,而不是表锁,或者更不用说行锁。
答案 2 :(得分:0)
你在适当的时候调用sqlite3_finalize吗?我注意到在sqlite中调用sqlite3_finalize失败会让事情停滞不前。