我的应用程序处于发布模式,并且我正在使用会议室数据库,而我以前的数据库版本是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中我想保留用户数据并删除回退破坏。
我该如何实现?
答案 0 :(得分:2)
使用 fallbackToDestructiveMigration 时,如果没有为迁移定义的迁移,它只会销毁(删除表并重新创建它们),因此您可以添加2到3个迁移。 / p>
也就是说,如果提供了迁移,则会使用它并绕过回退/破坏。
推荐的一种替代方法是使用 fallbacktodestructivemigrationfrom ,它可以用于定义要应用回退的特定缺失迁移。
例如您可以使用.fallbackToDestructiveMigrationFrom(1,7)