Mic*_*eyR 5 database migration android android-room
我正在制作一个新版本的应用程序,其新功能需要 Room DB 中的设置表中包含更多行数据。尽管我的数据库在结构上没有改变(没有新表,没有列更改等),但我正在考虑在 Room DB 上运行新的迁移(DB v2 -> v3),只是为了将这些新数据行添加到现有表中。这太过分了吗?
DB_INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class, Constants.DB_NAME)
.addMigrations(new Migration_1_2(context, 1, 2), new Migration_2_3(2, 3))
.build();
Run Code Online (Sandbox Code Playgroud)
我知道我可以在 RoomDatabase 的 onCreate() / onOpen() 回调中添加数据。例如
private static RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
public void onCreate (SupportSQLiteDatabase db) {
// do something after database has been created
}
public void onOpen (SupportSQLiteDatabase db) {
// do something every time database is open
}
};
Run Code Online (Sandbox Code Playgroud)
但我不确定这两个是否合适?
onCreate() - 对于现有应用程序用户,不会调用此方法,因为他们已经拥有上一个应用程序版本的数据库。
onOpen() - 每次启动应用程序时都会运行 - 这看起来开销很大。
至少对于新的迁移来说,这只会为用户运行一次。这是正确的方法吗?
尝试这个来添加迁移。
在实体中添加列名称
@ColumnInfo(name = "columnName")
private String columnName;
Run Code Online (Sandbox Code Playgroud)
使用此代码块执行迁移查询
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + columnName + " " + type + " DEFAULT NULL");
}
};
Run Code Online (Sandbox Code Playgroud)
添加迁移
.addMigrations(MIGRATION_1_2,MIGRATION_2_3)
.build();
Run Code Online (Sandbox Code Playgroud)
然后增加你的数据库版本。
| 归档时间: |
|
| 查看次数: |
2151 次 |
| 最近记录: |