相关疑难解决方法(0)

如果仅添加新表,则会进行会议室数据库迁移

不要假设,我有一个简单的房间数据库:

@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)

java android database-migration android-room

73
推荐指数
2
解决办法
1万
查看次数

标签 统计

android ×1

android-room ×1

database-migration ×1

java ×1