roomをmigrationする
roomのtable定義の追加が必要になり、初migrationしたのでメモ。
こちらを参考にしつつ進めました。
1. データベースclassのversionを更新
@Database(entities = [LoginInfo::class], version = 1)
↓
@Database(entities = [LoginInfo::class, UserInfo::class], version = 2)
2. migration部分のSQLを追加
/** * Migrate from: * version 1 - create table for login info * to * version 2 - create table for user info */ internal val MIGRATION_1_2: Migration = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL( """ CREATE TABLE IF NOT EXISTS user_info ( id INTEGER NOT NULL, name TEXT NOT NULL, // ・・・(略) ) """ ) }
3. DB作成時にmigrationの指定を追加
Room.databaseBuilder(context, AppDatabase::class.java, "test-db") .build()
↓
Room.databaseBuilder(context, AppDatabase::class.java, "test-db") .addMigrations(MIGRATION_1_2) .build()
※MIGRATION_2_3が必要になった場合は.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
の様に追記していく。
4. buildすると 2.json
が自動生成される
以上!
何か間違い等あればご指摘お願いしますmm
その他メモ
最初手順 1. のversion指定せずにbuildしてしまったら、1.json の方が更新されて2.jsonが生成されずハマりました。
MIGRATION_2_3 をしたいときはMIGRATION_1_3 は不要
migration怖いですよね。。
次はroom migration の test について書きます。