【问题标题】:Versioning Room database版本控制室数据库
【发布时间】:2019-01-31 22:17:52
【问题描述】:
我可能不理解fallbackToDestructiveMigration()
当我更改 Room 版本号时,我希望它像第一次启动时那样清除我的表并重新填充。但它不会在调用我的填充方法的回调中调用“onCreate”。
相反,表格只会被清除。
关于我的数据库:
它使用实时数据。用户永远不能更改数据库。 ID 被手动插入到代码中,因为它们被用作在线数据库的外键。
有没有办法让未来的迁移重新构建整个东西?
【问题讨论】:
标签:
android
android-room
android-jetpack
【解决方案1】:
当您使用fallbackToDestructiveMigration() 时,您的onCreate() 不会被调用,因为您的数据库已经创建。
但是您可以通过以下方式使用迁移再次重建整个事物:
Room.databaseBuilder(context, MyDatabase.class, DB_NAME)
.addMigrations(FROM_1_TO_2)
.build();
static final Migration FROM_1_TO_2 = new Migration(1, 2) {
@Override
public void migrate(final SupportSQLiteDatabase database) {
database.execSQL("DELETE FROM `table_name`"); //this will empty table
database.execSQL("YOUR_INSERTION_QUERY"); //insert in loop for multiple insertion
}
};
使用上述代码,您可以在更新数据库版本时随时清除并重新填充表。