如何解决如何处理旧版的Room Database或如何管理特定版本的后备广告
我们如何管理旧数据库版本。
例如 version = 1 version = 2 都是我的旧版本, 当前版本= 10 。 版本9,10中有太多更改。
在这种情况下,如果要更新到版本,我想清除数据库版本1,2 = 9或10
或
我们如何编写特定版本的备用广告?
解决方法
对于管理特定版本或所有版本的回退,Room提供了一些方法来管理回退。
1- fallbackToDestructiveMigrationFrom(int版本...)
-
允许从特定的破坏性地重新创建数据库表
-
开始架构版本。
-
此功能与
提供的功能相同 -
{@ 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()
- 如果{@link Migration}可以,则Room可以破坏性地重新创建数据库表
- 找不到将旧数据库架构迁移到最新架构版本。
- 当设备上的数据库版本与最新架构版本不匹配时,Room
- 在数据库上运行必要的{@link迁移}。
- 如果无法找到将数据库带到的{@link迁移}集
- 当前版本,它将引发{@link IllegalStateException}。
- 您可以调用此方法来更改此行为以重新创建数据库,而不是 崩溃。
- 如果数据库是通过资产或文件创建的,那么Room将尝试使用相同的数据库
- 文件以重新创建数据库,否则将删除 中的所有数据
- 由Room管理的数据库表。
instance = Room.databaseBuilder(context,"DatabaseName")
.fallbackToDestructiveMigration()
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
try {
} catch (IOException e) {
e.printStackTrace();
}
}
}).build();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。