我可能不了解fallbackToDestructiveMigration()
更改房间版本号时,我希望它清除表并像第一次启动时一样重新填充。但是它不会在调用我的populate方法的回调中调用“ onCreate”。 而是只清除表。
关于我的数据库:
它使用实时数据。用户永远不能更改数据库。将ID用作在线DB的外键时,会将它们手动插入到代码中。
将来是否有办法重新构建整个系统?
答案 0 :(得分: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
}
};
使用上述代码,您随时可以在更新数据库版本时清除并重新填充表。