【发布时间】:2021-01-06 19:30:49
【问题描述】:
我们如何管理旧的数据库版本。
例如version = 1 version= 2都是我的旧版本,当前版本=10。 版本 9,10 的更改太多。
在这种情况下,如果更新到 version=,我想清除 版本 1,2 的数据库9 或 10
或
我们如何为特定版本编写回退代码?
【问题讨论】:
标签: android kotlin android-room database-migration fallback
我们如何管理旧的数据库版本。
例如version = 1 version= 2都是我的旧版本,当前版本=10。 版本 9,10 的更改太多。
在这种情况下,如果更新到 version=,我想清除 版本 1,2 的数据库9 或 10
或
我们如何为特定版本编写回退代码?
【问题讨论】:
标签: android kotlin android-room database-migration fallback
为了管理特定版本或所有版本的后备,Room 有一些方法可以管理后备。
1- fallbackToDestructiveMigrationFrom(int versions...)
允许从特定的破坏性地重新创建数据库表
开始架构版本。
此功能与提供的功能相同
{@link #fallbackToDestructiveMigration()},除了这个方法允许
允许破坏性重建的一组模式版本的规范。
如果需要,使用此方法优于 {@link #fallbackToDestructiveMigration()}
允许从某些架构版本进行破坏性迁移,同时仍能利用
由于无意丢失迁移而引发的异常。
注意:传递给此方法的任何版本都不能作为开始或结束存在
提供给 {@link #addMigrations(Migration...)} 的 {@link Migration} 中的版本。如果一个
传递给此方法的版本在迁移中作为起始或结束版本找到,
会抛出异常。
instance = Room.databaseBuilder(context, DbHelper.class, "DatabaseName")
.addMigrations(MIGRATION_4_5,MIGRATION_5_6)
.fallbackToDestructiveMigrationFrom(1,2,3)
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
try {
} catch (IOException e) {
e.printStackTrace();
}
}
}).build();
2- fallbackToDestructiveMigration()
instance = Room.databaseBuilder(context, DbHelper.class, "DatabaseName")
.fallbackToDestructiveMigration()
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
try {
} catch (IOException e) {
e.printStackTrace();
}
}
}).build();
【讨论】: