【问题标题】:What if query of transaction raise exception?如果事务查询引发异常怎么办?
【发布时间】:2016-11-24 10:18:46
【问题描述】:

如果在交易过程中发生异常怎么办? db.endTransaction() 将被调用,但任何来自事务的查询都会被执行?还是全部取消?

try {
    db.beginTransaction();
    db.setTransactionSuccessful();
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    db.endTransaction();
}

【问题讨论】:

  • 如果发生异常,您希望回滚事务。在这种情况下,所有写入都应该回滚或取消。
  • 这真的取决于这些命令的作用!假设 db.setTransactionSuccessful() 是执行提交的点,并且只有在该数据被存储之后,通常在 catch 块中你应该有类似 db.setTransactionFail() 的东西,它将执行回滚。

标签: android sqlite try-catch android-sqlite


【解决方案1】:

transactions 的重点是确保

SQLite 中单个事务中的所有更改要么完全发生,要么根本不发生,即使将更改写入磁盘的行为被中断

  • 程序崩溃,
  • 操作系统崩溃,或
  • 电源故障。

Android beginTransaction() documentation 说:

当……事务结束时,该事务中完成的所有工作……将被提交或回滚。如果任何事务在未标记为干净的情况下结束(通过调用 setTransactionSuccessful),则更改将回滚。否则他们将被提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2021-11-05
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多