-
在 Android 开发中,使用 Room 时,出现如下错误信息
java.lang.IllegalStateException:
A migration from 6 to 7 was required but not found.
Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.解读
java.lang.IllegalStateException:
需要从版本 6 到版本 7 的迁移策略,但未找到
请通过 RoomDatabase.Builder.addMigration(Migration ...) 提供必要的迁移路径
或者通过 RoomDatabase.Builder.fallbackToDestructiveMigration* 方法之一允许破坏性迁移
问题原因
- 使用 Room 将数据库从版本 6 升级到版本 7,但没有提供对应的迁移策略
处理策略
- 通过 addMigration 方法提供必要的迁移策略(推荐)
java
private static final Migration MIGRATION_6_7 = new Migration(6, 7) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
...
}
};
java
MyDatabase myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME)
.addMigrations(MIGRATION_1_2)
.addMigrations(MIGRATION_2_3)
.addMigrations(MIGRATION_3_4)
.addMigrations(MIGRATION_4_5)
.addMigrations(MIGRATION_5_6)
.addMigrations(MIGRATION_6_7)
.build();
- 通过 fallbackToDestructiveMigration 方法允许破坏性迁移(不推荐)
java
MyDatabase myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();