版本控制室数据库

时间:2019-01-31 22:17:53

标签: android android-room android-jetpack

我可能不了解fallbackToDestructiveMigration()

更改房间版本号时,我希望它清除表并像第一次启动时一样重新填充。但是它不会在调用我的populate方法的回调中调用“ onCreate”。 而是只清除表。

关于我的数据库:

它使用实时数据。用户永远不能更改数据库。将ID用作在线DB的外键时,会将它们手动插入到代码中。

将来是否有办法重新构建整个系统?

1 个答案:

答案 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
        }
    };

使用上述代码,您随时可以在更新数据库版本时清除并重新填充表。