Android 版本控制室数据库

Android 版本控制室数据库,android,android-room,android-jetpack,Android,Android Room,Android Jetpack,我可能不理解fallbackToDestructiveMigration() 当我更改我的房间版本号时,我希望它能像第一次启动时一样清理我的桌子并重新填充。但是它没有在我的回调中调用“onCreate”,回调调用了我的populate方法。 取而代之的是,这张桌子只会清空 关于我的数据库: 它使用实时数据。用户永远不能更改数据库。ID被手动插入代码中,因为它们被用作联机数据库的外键 将来的迁移是否有办法重建整个过程?当您使用fallbackToDestructiveMigration()时,不会

我可能不理解
fallbackToDestructiveMigration()

当我更改我的房间版本号时,我希望它能像第一次启动时一样清理我的桌子并重新填充。但是它没有在我的回调中调用“onCreate”,回调调用了我的populate方法。 取而代之的是,这张桌子只会清空

关于我的数据库:

它使用实时数据。用户永远不能更改数据库。ID被手动插入代码中,因为它们被用作联机数据库的外键


将来的迁移是否有办法重建整个过程?

当您使用
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
        }
    };
使用上述代码,您可以在更新DB版本时始终清除并重新填充该表