在迁移(3,4)中,我删除了表TableA并创建了两个新表TableB和` `TableC。
static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS `TableA`");
database.execSQL("CREATE TABLE IF NOT EXISTS " +
"`TableB` (`id` INTEGER NOT NULL, " +
"PRIMARY KEY(`id`))");
database.execSQL("CREATE TABLE IF NOT EXISTS " +
"`TableB` (`id` INTEGER NOT NULL, " +
"PRIMARY KEY(`id`))");
// bulky method
databaseWriteExecutor.execute(AppDatabase::populateProblem);
}
};在迁移(4,5)中,我希望删除TableB和TableC:
static final Migration MIGRATION_4_5 = new Migration(4, 5) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS `TableB`");
database.execSQL("DROP TABLE IF EXISTS `TableC`");
}
};如您所见,迁移(4,5)与迁移(3,4)相反。现在假设用户希望从3迁移到5,据我所知,Room将连续运行两次迁移--在本例中是3到4,然后是4到5,创建两个表,然后删除它们是浪费时间,所以为了优化这个过程,我添加了一个新的迁移(3,5):
static final Migration MIGRATION_3_5 = new Migration(3, 5) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS `TableA`");
}
};问题:我能安全地从源代码中删除迁移(3,4)吗?因为我认为它不再被使用了。在这个迁移中,我调用populateProblem()方法,这是一个非常大的方法,删除迁移将减少apk的大小。
发布于 2022-09-03 17:22:18
是的,你可以放弃中间迁移。您只需要保持从以前的每个版本到最新版本的迁移。因此,如果您的最新DB版本是5,并且假设生产中有版本1-4,则只需要进行以下迁移:
Migration(1, 5)
Migration(2, 5)
Migration(3, 5)
Migration(4, 5)https://stackoverflow.com/questions/73593929
复制相似问题