不要假设,我有一个简单的房间数据库:
@Database(entities = {User.class}, version = 1)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在添加一个新实体:Pet
并将版本提升为2:
@Database(entities = {User.class, Pet.class}, version = 2)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)
当然,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`))"); …
Run Code Online (Sandbox Code Playgroud)