2016-11-24 114 views
0

如果事务期间发生异常,会发生什么情况? db.endTransaction()会被调用,但是任何来自事务的查询都会执行?或者全部将被取消?如果事务查询引发异常,该怎么办?

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

如果发生异常,您希望回滚事务。在这种情况下,所有的写入操作应该被回滚或取消。 – Thomas

+0

这真的取决于这些命令做什么!假设db.setTransactionSuccessful()是执行提交的地方,并且只有在存储了数据之后,通常在catch块中应该有类似db.setTransactionFail()的东西,它会执行回滚。 – RLM

回答

0

transactions整点是要确保在SQLite的单个事务内的

所有更改完全或根本不发生,即使写的变化到磁盘的行为通过

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

Android的beginTransaction() documentation说:

当...事务结束所有在这个事务......将被提交或回滚所做的工作。如果任何事务没有被标记为干净(通过调用setTransactionSuccessful),则更改将被回滚。否则他们会承诺。

相关问题