在更新数据库版本后,我不清楚如何使用room。
例如,假设我最初在房间中定义了以下数据库:
@Database(entities = {Event.class}, version = 1)
@TypeConverters(DateTypeConverter.class)
public abstract class EventDatabase extends RoomDatabase {
public abstract EventDao eventDao();
}
然后我更改版本,使它现在看起来像这样:
@Database(entities = {Event.class}, version = 2)
@TypeConverters(DateTypeConverter.class)
public abstract class EventDatabase extends RoomDatabase {
public abstract EventDao eventDao();
}
当我看到更改版本时,我的意思是我可能在数据库中添加或删除了列,因此它们不相同。我的问题如下:
我现在需要维护两个数据库吗? v1和v2?有没有办法将实体轻松复制到v2?更改版本是否足以简单地将其从1更改为2或者我是否必须创建另一个名为EventDatabase2的类?
这里也是我正在使用的房间版本:android.arch.persistence.room:runtime:1.0.0-alpha1
答案 0 :(得分:3)
因此,假设我有一个新的应用程序版本和一个新的数据库版本。我只需要像这样更改版本= 2:
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`))");
}
};
然后提供这样的迁移政策:
onView(withId(R.id.register_scroll_view))
.perform(CustomScrollActions.nestedScrollTo, click());
这里的关键是,如果未提供迁移策略,则似乎整个数据库都已重建(因此您的用户将丢失所有以前的数据)。
这是根据提供的@commonsWare更新link。
答案 1 :(得分:1)
另一种选择: 您可以在数据库架构中进行修改后更新数据库版本号,同时如果您不想提供数据库对象,则可以在构建数据库对象时使用 fallbackToDestructiveMigration()方法迁移计划,只需应用您想要的更改,但始终建议您提供迁移跟踪:
app.use('/proxy', proxy('www.google.com'));
答案 2 :(得分:0)
我的答案可能晚了,但是它可能会帮助像我这样最近才找到同一问题答案的人。
由于某些原因,您需要升级数据库版本,而无需调整数据库,就像编辑@Dao适配器或@Entity属性一样简单,而不会影响数据库的结构。
如果按以下方式升级数据库中的版本:
发件人:
@Database(
entities = [ExampleClass::class],
version = 1,
exportSchema = false
)
收件人:
@Database(
entities = [ExampleClass::class],
version = 2,
exportSchema = false
)
如果以后不添加任何内容,则将刷新数据库,就像删除数据库一样。为避免删除,您只需添加一个空的Migration,如下所示:
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
}
}
建立数据库:
@Synchronized
private fun buildDatabase(context: Context, databaseName: String): AppDatabase {
return Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
databaseName
)
.addMigrations(MIGRATION_1_2)
.allowMainThreadQueries()
.fallbackToDestructiveMigration()
.build()
}
数据库数据将不受影响