gpt4 book ai didi

java - 房间数据库架构更新

转载 作者:行者123 更新时间:2023-12-01 13:02:12 26 4
gpt4 key购买 nike

我的应用程序处于 Release模式,我正在使用房间数据库,我之前的数据库版本是 2,启用了对破坏性迁移的回退。

@Database(entities = {
User.class,ApplicationSetting.class},
version = 2,
exportSchema = false)
abstract public class DatabaseContext extends RoomDatabase {

private static final Object sLock = new Object();
private static DatabaseContext INSTANCE;
public static String DATABASE_NAME = AppConstants.DATABASE_NAME;

public static DatabaseContext getInstance(Context context) {
synchronized (sLock) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
DatabaseContext.class, DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();
}
return INSTANCE;
}
}

我在表中添加了一个新列并将版本更改为 3。现在我想提供从版本 2 到版本 3 的迁移,这样数据就不会丢失。但我很困惑,因为在版本 2 中我启用了回退破坏性迁移,现在在版本 3 中我想保留用户数据并删除回退破坏。

我怎样才能做到这一点?

最佳答案

使用 fallbackToDestructiveMigration ,如果没有为迁移定义迁移,它只会破坏(删除表并重新创建它们),因此您可以添加 2 到 3 迁移。

也就是说,如果提供了迁移,则使用它并绕过回退/销毁。

推荐的替代方法是使用 fallbacktodestructivemigrationfrom ,这可用于定义要应用回退的特定缺失迁移。

例如你可以使用 .fallbackToDestructiveMigrationFrom(1,7)

  • 1 允许从 1 到 2 的破坏性
  • 7 允许从 7 到 8 的破坏性(添加只是为了表明可以提供多个启动版本)
  • 其他的 2 到 3、3 到 4 等将需要迁移。
  • 请注意,这是更具体的,因此如果提供 1 到 2 或 7 到 8 的迁移,则会导致异常。
  • 关于java - 房间数据库架构更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663822/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com