トランザクションを使用していてSQL操作が失敗した場合、すべての変更がロールバックされることはわかっていますが、finallyステートメントの後ですべてのコードを停止しますか、それとも残りは実行し続けますか?
以下のコードのようなものは正しく見えますか、それとも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();
}
}