gpt4 book ai didi

multithreading - 带有Qt的SQLite3中的“Database is locked”错误

转载 作者:行者123 更新时间:2023-12-03 18:40:12 26 4
gpt4 key购买 nike

我在嵌入式系统和Qt应用程序的x86上使用SQLite3。当多个线程尝试读取/写入数据库时​​,我遇到常见错误“数据库已锁定”。

我阅读了其他答案中建议的this文章,但我为每个线程创建了一个不同的连接。

通过稍微调整QSQLITE_BUSY_TIMEOUT选项(非常大的值:10000000),我在x86系统和嵌入式系统上解决了此问题,但在后一种情况下,仅当不使用事务时才解决。不幸的是,我需要将事务用于每个线程的所有工作。

我的问题是:使用事务时,SQLite3是否不支持同时从数据库中进行读写操作?为什么不简单地等待所有必要的时间来获取锁?也许我没有正确设置?

最佳答案

阅读sql的BEGIN TRANSACTION语句。它明确表示默认事务行为已延迟,这说明了您所看到的错误。另请阅读此link,以获得另一个很好的解释。

因此,您需要以“BEGIN IMMEDIATE TRANSACTION”启动SQL,其他所有人都必须这样做。

您可以找到源代码示例here。注意

bool SqlEngine::beginTransaction()

方法,并在您的代码中执行相同的操作。

关于multithreading - 带有Qt的SQLite3中的“Database is locked”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com