将现有的sqlite数据库迁移到Room,将现有的迁移脚本放在哪里?

Migrate existing sqlite database to Room, where to put existing migration scripts?

我有一个版本 3 的现有 sqlite 数据库。我的 SqliteOpenHelper 管理从 v1 到 3 的升级。我想迁移到 Room。我了解进行新的房间迁移以从我当前的 v3 迁移到新的 Roomified v4,但是我现有的迁移脚本去哪里了?

如果用户将应用程序从数据库的 v2 直接升级到数据库的 v4,Room 会处理 v3 到 4,但是什么处理 v2 到 3?

我尝试将迁移脚本移植到 Room Migration 对象中,但它们无法 运行 因为不存在 json 架构(这些架构上使用了空间)。

在构建 Room 数据库之前,我尝试保留旧的 SqliteOpenHelper 并使用它从 1 升级到 3。这首先工作 运行,但随后 运行s 使 SqliteOpenHelper 崩溃,说它无法降级数据库(Room 成功升级到 v4,但 open helper 只知道 v3。使用它来确保数据库升级到v3 导致它尝试降级)

通常您可以将所有旧迁移移动到 Room 的 Migration 对象,因此在您的情况下创建所有:Migration(1, 2), Migration(2, 3), Migration(3, 4) 迁移。 还有一些事情需要了解:

  • 迁移将延迟执行 - 当第一个查询是 执行,而不是在检索 Room 实例时执行
  • 如果您当前的版本是 3,您将需要创建到版本 4 的迁移,即使是空的,正如您已经注意到的那样
  • 如果您想加快迁移过程,可以创建直接迁移,例如 Migration(1,4)

看看这个 example which is well described in this article 如果您还有其他问题,请告诉我。