【发布时间】:2018-09-17 01:06:28
【问题描述】:
我在版本 3 上有一个现有的 sqlite 数据库。我的 SqliteOpenHelper 管理从 v1 到 3 的升级。我想迁移到 Room。我了解要进行新的 Room 迁移以从当前的 v3 迁移到新的 Roomified v4,但是我现有的迁移脚本会去哪里?
如果用户将应用程序从数据库的 v2 直接升级到数据库的 v4,Room 将处理 v3 到 4,但是什么处理 v2 到 3?
我尝试将迁移脚本移植到 Room Migration 对象中,但它们无法运行,因为不存在 json 架构(这些架构上使用了房间)。
在构建 Room 数据库之前,我尝试保留旧的 SqliteOpenHelper 并使用它从 1 升级到 3。这首先运行,但随后的运行使 SqliteOpenHelper 崩溃,说它无法降级数据库(房间成功升级到 v4,但开放助手只知道 v3。使用它来确保数据库升级到 v3 会导致它尝试降级)
【问题讨论】:
-
什么 json 架构是什么意思?
-
Room 自动为每个数据库版本生成它们。使用它们来检测何时发生架构更改等
-
嘿,我更新了我的答案,如果它对你有用,请告诉我
-
是的,它确实在运行时工作。 Room 的迁移测试器是唯一因缺少 json 模式而崩溃的部分。所以现在只需要拿出一个适配器,这样我就可以使用现有测试中的遗留脚本并将它们包装在 Room 迁移中,以便 Room 在运行时使用
标签: android database-migration android-room