0
onUpgrade()メソッドの実行中にSQLiteデータベース内のテーブルのスキーマを更新しようとしています。私は、テーブルを削除して、新しいスキーマでそれを再作成することによって、やっている。時には、古いスキーマがこれらの2つのアクションが実行された後も持続するので、新しいテーブルを作成する前に古いテーブルを強制的に削除する方法が必要です。誰もこれを行う方法を知っていますか?SQLiteデータベースアクションを強制的に同期させるには
database.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARMS);
database.execSQL(buildAlarmTable());
OLD SCHEMA:ここでは、コードです
private String buildAlarmTable() {
return "CREATE TABLE IF NOT EXISTS " + TABLE_ALARMS +
"(" + KEY_ALARM_ID + " INTEGER PRIMARY KEY NOT NULL," +
KEY_ALARM_NAME + " TEXT," +
KEY_ALARM_TIME + " INTEGER" +
")";
}
NEW SCHEMA:
public String buildAlarmTable() {
return "CREATE TABLE IF NOT EXISTS " + TABLE_ALARMS +
"(" + KEY_ALARM_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_ALARM_NAME + " TEXT," +
KEY_ALARM_TIME + " INTEGER," +
KEY_ALARM_MALID + " INTEGER" +
")";
}
が、私は例外を取得していますので、古いスキーマが解決しないことを知っている "KEY_ALARM_MALID" 欄後でデータベースから読み込むときには存在しません。
通常、あなたはちょうど私があなたのために、同期の行動を求めているかわからないんだけど、あなたのSqliteOpenHelperクラス –
にデータベースのバージョン番号を更新、しかし。 SQLiteデータベースを照会するためのIO操作はかなり同期的です。 –
明確にするために、新しく作成されたTABLE_ALARMSテーブルには、新しい列を持たない古いスキーマがあることがあります。それ以外の場合は、新しいスキーマが正しく設定されます。これは、私が行動を同期的に起こっていないと思うように導く –