Android Room永久库-如何更改数据库版本

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

j2e*_*nue 6

因此,可以说我有一个新的应用程序版本和一个新的数据库版本。我只需要像这样更改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更新链接