假设我有一个简单的 Room 数据库:
@Database(entities = {User.class}, version = 1)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
现在,我要添加一个新实体: Pet
,并将版本改为2:
@Database(entities = {User.class, Pet.class}, version = 2)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
当然,Room 抛出了一个例外: java.lang.IllegalStateException: A migration from 1 to 2 is necessary.
假设我没有更改 User
类(因此所有数据都是安全的) ,那么我必须提供迁移,这只会创建一个新表。因此,我查看 Room 生成的类,搜索生成的查询来创建新表,复制它并粘贴到迁移中:
final Migration MIGRATION_1_2 =
new Migration(1, 2) {
@Override
public void migrate(@NonNull final SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS `Pet` (`name` TEXT NOT NULL, PRIMARY KEY(`name`))");
}
};
但是我发现手动操作很不方便。 有没有办法告诉 Room: < em > 我没有触摸任何现有的表,所以数据是安全的。请为我创建迁移?