Room:如何使用fallbackToDestructiveMigrationFrom()进行迁移?

时间:2019-09-06 09:17:26

标签: android android-room

我有一个应用程序,它的会议室数据库版本1已启动并正在运行。在版本2中,我想销毁所有表并重新创建模式,而不是编写Migration(1, 2)逻辑。因此,我阅读了docs并找到了方法.fallbackToDestructiveMigrationFrom()。因此,如果我在此处传递参数2,那么我认为它应该重新创建所有表 版本2。我无法理解的是在文档中他们提到了一个音符

  

注意:在提供给addMigrations(Migration)的Migrations中,传递给此方法的版本也可能不存在,无论是开始版本还是结束版本。如果在迁移中找到传递给此方法的版本作为开始或结束版本,则将引发异常

这是否意味着如果我将数据库版本升级到3并进行了一些模式更改,如果我写Migration(2, 3)它将引发异常?

2 个答案:

答案 0 :(得分:1)

如果您通过.fallbackToDestructiveMigrationFrom(3)并同时提供Migration(2, 3),这是正确的,Room会抛出异常。

那听起来确实像您真正想做的是使用fallbackToDestructiveMigration()。 在这种情况下,它将完全按照您的要求进行操作:

  1. 尝试从X版本(安装在设备上)升级到Y版本
  2. 如果没有Migration(X, Y),它将破坏架构和数据 并为版本Y创建一个新版本。

这样,您就不会出现异常。 我想这就是你要的...

答案 1 :(得分:0)

我在问题中说的每件事都是对的,除了我必须将1作为参数传递给.fallbackToDestructiveMigrationFrom()

.fallbackToDestructiveMigrationFrom(1)将意味着如果旧数据库版本为1则销毁数据库。如果当前版本为1,则它不像销毁数据库。这就是我的困惑。

为聊天中的澄清提供信用至Itamar Kerbel