j2e*_*nue 6 android android-room
我更新数据库版本后不清楚如何使用房间。
例如,假设我最初在房间中定义了以下数据库:
@Database(entities = {Event.class}, version = 1)
@TypeConverters(DateTypeConverter.class)
public abstract class EventDatabase extends RoomDatabase {
public abstract EventDao eventDao();
}
Run Code Online (Sandbox Code Playgroud)
然后我更改版本,使其现在看起来像这样:
@Database(entities = {Event.class}, version = 2)
@TypeConverters(DateTypeConverter.class)
public abstract class EventDatabase extends RoomDatabase {
public abstract EventDao eventDao();
}
Run Code Online (Sandbox Code Playgroud)
当我看到更改版本时,我的意思是我可能已经在数据库中添加或删除了列,所以它并不相同。我的问题如下:
我现在需要维护两个数据库吗?v1和v2?有没有办法将实体轻松复制到v2?还可以在更改版本时将其从1更改为2就足够了吗?还是我必须创建另一个名为EventDatabase2的类?
这也是我正在使用的房间的版本:android.arch.persistence.room:runtime:1.0.0-alpha1
因此,可以说我有一个新的应用程序版本和一个新的数据库版本。我只需要像这样更改version = 2:
@Database(entities = {Event.class}, version = 2)
@TypeConverters(DateTypeConverter.class)
public abstract class EventDatabase extends RoomDatabase {
public abstract EventDao eventDao();
}
Run Code Online (Sandbox Code Playgroud)
然后提供这样的迁移策略:
Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
.addMigrations(MIGRATION_1_2).build();
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
+ "`name` TEXT, PRIMARY KEY(`id`))");
}
};
Run Code Online (Sandbox Code Playgroud)
这里的关键是,如果未提供迁移策略,则似乎整个数据库都已重建(因此您的用户将丢失所有先前的数据)。
这是根据提供的@commonsWare更新链接。
| 归档时间: |
|
| 查看次数: |
4651 次 |
| 最近记录: |