如果使用事務並且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