を実装するときはSQLiteOpenHelper
、バージョン パラメータをスーパークラス コンストラクタに渡します。これは、アプリケーションの将来のバージョンで変更できる静的な値である必要があります (通常、これはSQLiteOpenHelper
、スーパークラス コンストラクターに渡すデータベース名と共に、実装の静的な最終属性にする必要があります)。
次に、データベースを更新する場合は、SQLiteOpenHelper
実装で使用されるバージョン パラメーターをインクリメントし、実行する予定の SQL 変更をonUpgrade()
メソッド内でプログラムで実行します。
DB がバージョン 1 のテーブル A で開始し、バージョン 2 でテーブル B を追加し、バージョン 3 でテーブル C を追加したとします。onUpgrade メソッドは次のようになります。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) { // do stuff for migrating to version 2
db.execSQL( ...create table B... );
}
if (oldVersion < 3) { // do stuff for migrating to version 3
db.execSQL( ...create table C... );
}
}
スーパークラス コンストラクターが実行されると、格納されている SQLite .db ファイルのバージョンと、パラメーターとして渡されたバージョンが比較されます。それらが異なる場合、onUpgrade()
呼び出されます。
実装を確認する必要がありますが、データベースを作成する必要がある場合にonUpgrade()
も呼び出されると思いonCreate()
ます。すべてのアップグレードを確実に実行する方法があります (たとえば、すべてのバージョン番号を正の整数に強制し、新しく初期化することによって)。バージョン 0 で作成されたデータベース)。