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

时间:2018-04-06 23:40:53

标签: android database-migration android-room

我在版本3上有一个现有的sqlite数据库。我的SqliteOpenHelper管理从v1升级到3.我想迁移到Room。我理解新的房间迁移是从我目前的v3转到新的Roomified v4,但我现有的迁移脚本在哪里?

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

请查看此example中详细说明的article,如果您有任何其他问题,请与我们联系。