如果使用事务并且sql操作失败,我知道它会回滚所有更改,但会在finally语句后暂停所有代码,还是会继续运行其他代码?在android中的事务失败后究竟发生了什么?
像下面的代码看起来是否正确或应该使用catch语句?是否有可能为测试目的而模拟错误?
public static boolean updateSuccessful = false;
updateToVersion2();
//Does anything after here still run on error?
if(!updateSuccessful) {
deleteAndRecreateDatabase();
}
public void updateToDbVersion2() {
this.myDataBase.beginTransaction();
try {
this.myDataBase.execSQL("UPDATE myRecords SET column = 'newValue1' WHERE _id = 1");
this.myDataBase.execSQL("UPDATE myRecords SET column = 'newValue2' WHERE _id = 2");
this.myDataBase.setTransactionSuccessful();
// This is not reached on update error, right?
updateSuccessful = true;
} finally {
this.myDataBase.endTransaction();
}
}
因此没有什么特别的事情发生。它会像其他任何错误一样失败,但是如果使用事务,它将不会对数据库进行部分更改。 – Jack 2012-08-12 21:53:16
是的,但仍然推荐使用它们。请注意,数据库中的每个操作都会打开一个单独的事务。这个过程大部分时间都在进行。如果你在同一事务之外提交了20个更改到你的数据库,那么处理时间将乘以20.如果你在同一个事务中包含所有这些更改,那么它只需要几毫秒。 – 2012-08-13 10:34:36
感谢您的信息。我认为这比实际更复杂。 – Jack 2012-08-15 01:33:57