android mysql移植_迁移 Room 数据库

当您在应用中添加和更改功能时,需要修改 Room 实体类以反映这些更改。但是,如果应用更新更改了数据库架构,那么保留设备内置数据库中已有的用户数据就非常重要。

Room 持久性库支持通过 Migration 类进行增量迁移以满足此需求。每个 Migration 子类通过替换 Migration.migrate() 方法定义 startVersion 和 endVersion 之间的迁移路径。当应用更新需要升级数据库版本时,Room 会从一个或多个 Migration 子类运行 migrate() 方法,以在运行时将数据库迁移到最新版本:

Kotlin

val MIGRATION_1_2 = object : Migration(1, 2) {

override fun migrate(database: SupportSQLiteDatabase) {

database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, `name` TEXT, " +

"PRIMARY KEY(`id`))")

}

}

val MIGRATION_2_3 = object : Migration(2, 3) {

override fun migrate(database: SupportSQLiteDatabase) {

database.execSQL("ALTER TABLE Book ADD COLUMN pub_year INTEGER")

}

}

Room.databaseBuilder(applicationContext, MyDb::class.java, "database-name")

.addMigrations(MIGRATION_1_2, MIGRATION_2_3).build()Java

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`))");

}

};

static final Migration MIGRATION_2_3 = new Migration(2, 3) {

@Override

public void migrate(SupportSQLiteDatabase database) {

database.execSQL("ALTER TABLE Book "

+ " ADD COLUMN pub_year INTEGER");

}

};

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")

.addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();

注意:为使迁移逻辑正常工作,请使用完整查询,而不要引用表示查询的常量。

迁移过程完成后,Room 会验证架构以确保迁移成功完成。如果 Room 发现问题,就会抛出包含不匹配信息的异常。

如需了解详情,请参阅 GitHub 上的 Room 迁移示例。

测试迁移

迁移通常十分复杂,迁移定义错误可能会导致应用崩溃。为了保持应用的稳定性,您应测试迁移。Room 提供了一个 room-testing Maven 工件来协助完成此测试过程。不过,为使此工件正常工作,您必须先导出数据库的架构。

导出架构

Room 可以在编译时将数据库的架构信息导出为 JSON 文件。如需导出架构,请在 app/build.gradle 文件中设置 room.schemaLocation 注释处理器属性:

build.gradle

android {

...

defaultConfig {

...

javaCompileOptions {

annotationProcessorOptions {

arguments += ["room.schemaLocation":

"$projectDir/schemas".toString()]

}

}

}

}

导出的 JSON

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值