我在嵌入式系统上使用SQLite3,在Qt应用程序中使用x86。当多个线程尝试读/写数据库时,我遇到了常见错误“数据库被锁定”。
我在其他一些答案中读到了this文章,但我正在为每个帖子创建一个不同的连接。
通过调整QSQLITE_BUSY_TIMEOUT选项(到一个非常大的值:10000000),我在x86系统和嵌入式系统上解决了这个问题,但在后一种情况下只在不使用事务时解决了。不幸的是,我需要为每个线程的所有工作使用事务。
我的问题是:SQLite3是否支持在使用事务时同时从/向数据库读/写?为什么不等待所有必要的时间来获得锁?也许我没有正确设置?
答案 0 :(得分:3)
阅读SQL语句BEGIN TRANSACTION。它明确表示默认的事务行为是延迟的,这解释了您所看到的错误。另请阅读此link以获得另一个好的解释。
所以你需要以“BEGIN IMMEDIATE TRANSACTION”开始你的SQL,其他人必须这样做。
您可以找到源代码示例here。注意
bool SqlEngine::beginTransaction()
方法并在代码中执行相同的操作。