我使用QSqlDatabase访问我的sqlite3数据库。
当INSERT命令由于没有可用磁盘空间而失败时,回滚也将失败,并且我的日志中还有下一条消息:
Database error : disk I/O error
Database driver error : Unable to fetch row
Command = INSERT OR FAIL INTO Procedure ( ProcedureUUID, ProcedureGroupUUID, DefaultLocale, Author, CanBeDeleted, VersionMajor, VersionMinor, VersionMaintenance, VersionBuild ) VALUES( :ProcedureUUID, :ProcedureGroupUUID, :DefaultLocale, "User", 1, 0, 0, 0, 0 );
(我正在尝试记录每个事件)。
在我的代码中,我打开一个数据库,启动事务,然后执行查询。在任何查询失败的情况下,我都会进行回滚。
我希望每次回滚都能成功,但它的接合情况并非如此。
有人可以解释回滚失败时的情况吗? 以及如何调试此问题。
由于
编辑:
是不是我无法进行回滚,因为第一个SQL命令失败了?
答案 0 :(得分:0)
我想我想通了,我正在为将来的参考作出答案。
如果第一个sql命令失败,则查询不会处于活动状态,并且无法进行回滚。最简单的方法是在执行回滚之前使用isActive检查查询是否处于活动状态。