SQLiteのアップグレード中にトランザクションが失敗した場合、ドロップテーブルは何も実行していません。ドロップSQLは例外をスローしません。Android SQLite - アップグレード中にトランザクションが失敗した後のドロップテーブル
私はこれを動作させるための唯一の方法は、トランザクションの処理をすべて削除することですが、アップグレード中に何が問題になったのかを分析するためにデータベースを変更しないようにします。
private void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
try {
db.beginTransaction();
// Exception occurs here
db.setTransactionSuccessful();
db.endTransaction();
}catch(Exception e){
db.endTransaction(); // Transaction is unsuccessful and changes rolled back
// Save for analyses
db.execSQL("DROP TABLE ..."); // Drop table does nothing
}
}
トランザクションからの変更がロールバックされるように、終了トランザクション後に実行する必要があります。 – Ryan
エンドトランザクションはロールバックを行います。右? –
最終的に完全なテーブルを削除したときに変更がロールバックされるのはなぜですか? – Nitesh