【问题标题】:QSqlError("5", "Unable to fetch row", "database is locked")QSqlError("5", "Unable to fetch row", "database is locked")
【发布时间】:2017-04-01 17:48:01
【问题描述】:

我收到此错误“QSqlError("5", "Unable to fetch row", "database is locked")

我已完成研究,我认为问题出在以下事实:我正在执行 INSERT 查询,而 SELECT 查询仍处于活动状态,这会锁定数据库。现在我想人们经常遇到这个问题,因为根据SELECT 查询的输出写入数据库是很常见的,所以我想问一下解决这个问题的最佳方法是什么?在使用query.finish() 关闭查询以解锁数据库后,我能否获取查询(使用query.next())?还是应该将结果存储在临时容器中,关闭查询然后遍历临时容器?

非常感谢您

【问题讨论】:

  • 只有当有另一个与活动事务的连接时才会发生“数据库被锁定”错误。但无论如何,如果你修改你当前正在读取的数据,结果是不确定的。
  • 能否详细说明“结果未指定”?
  • 结果行可以直接从表中读取,或者从临时排序列表中读取,或者从索引中读取。因此,当您在迭代表时进行更改时,可能会丢失或重复条目。
  • 我认为当您调用query.next() 时,查询已经有静态形式的结果(每次调用query.next() 时它都不会主动从数据库中读取数据,对吧?)
  • SQLite 尽可能按需计算结果行。

标签: qt sqlite qt5 qtsql


【解决方案1】:

您在运行此程序时是否打开了数据库阅读器?我有一个类似的问题,只有在我运行 DB Browser for SQLite 时才会发生。确保您没有任何其他软件打开了您的数据库文件。我在使用DB Browser for SQLite 时并不总是遇到这个问题,但是当我这样做时,关闭程序会解决它。

另外,我倾向于在每次查询完成后运行query.finish(),以确保没有交互。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 2020-01-25
    • 2018-03-29
    • 2022-12-01
    • 2022-12-26
    • 2017-05-17
    • 2020-12-19
    • 2022-12-31
    相关资源
    最近更新 更多