Qt QSqlError(“5”、“无法获取行”、“数据库已锁定”)

Qt QSqlError(“5”、“无法获取行”、“数据库已锁定”),qt,sqlite,qt5,qtsql,Qt,Sqlite,Qt5,Qtsql,我收到此错误“QSqlError(“5”,“无法获取行”,“数据库已锁定”)” 我已经做了研究,我认为问题是因为我正在执行INSERT查询,而SELECT查询仍然处于活动状态,这会锁定数据库。现在我想象人们经常遇到这个问题,因为根据SELECT查询的输出写入数据库是很常见的,所以我想问一下解决这个问题的最佳方法是什么?在使用query.finish()关闭查询以解锁数据库后,我是否能够获取查询(使用query.next())?或者我应该将结果存储在临时容器中,关闭查询,然后在临时容器上迭代 非常

我收到此错误“
QSqlError(“5”,“无法获取行”,“数据库已锁定”)

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


非常感谢您

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

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


我希望这对你有帮助

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