【问题标题】:Rollback fails due to no free space由于没有可用空间,回滚失败
【发布时间】:2011-02-21 16:58:08
【问题描述】:

我正在使用 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命令失败,所以无法回滚?

【问题讨论】:

    标签: sql transactions qt4 sqlite rollback


    【解决方案1】:

    我想我想通了,我正在为将来的参考提供答案。

    如果第一个 sql 命令失败,则查询接缝不活跃,并且无法回滚。最简单的方法是在回滚之前使用isActive 检查查询是否处于活动状态。

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 2017-11-24
      • 2021-09-19
      • 2013-06-07
      • 1970-01-01
      • 2013-01-21
      • 2014-02-20
      • 1970-01-01
      • 2018-02-13
      相关资源
      最近更新 更多