ユーザ用ツール

サイト用ツール


既存のデータを引き継ぎつつdbスキーマを変更する方法

以前のリビジョンの文書です


方法

SQLiteOpenHelper#onUpgradeをコールさせ、onUpgrade内で任意のクエリを実行する。
onUpgradeをコールするには、コンストラクタに引き渡すDBバージョンを引き上げます。

SQLiteOpenHelperの実装例

仕様変更によりカラムが増えた例
テーブルfooにカラムageを追加し初期値として0を設定する
ALTER TABLE foo ADD COLUMN age INTEGER DEFAULT 0
public class DatabaseHelper extends SQLiteOpenHelper { / * DB ver * DBスキーマを変更した場合、インクリメントする * * +++++ 変更履歴 +++++ * v1 : ….. 20150101 t.sou * v2 : * …. */ public static final int DB_VERSION = 1; public static final String TABLE_NAME = “foo”; / * コンストラクタ * アプリが保持しているDBバージョンと異なるバージョンが渡された場合、 * onUpgrade()またはonDowngradeが呼ばれる。 */ public DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { final String sql = “CREATE TABLE ”+TABLE_NAME+“(” +“id INTEGER PRIMARY KEY AUTOINCREMENT, ” +“name TEXT” +“);”; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(newVersion > oldVersion) { switch(newVersion) { case 2: db.execSQL(“ALTER TABLE ”+TABLE_NAME+“ ADD COLUMN age INTEGER NOT NULL DEFAULT 0”); } } } }

既存のデータを引き継ぎつつdbスキーマを変更する方法.1449802426.txt.gz · 最終更新: 2015/12/11 11:53 by sou