【发布时间】: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 尽可能按需计算结果行。