【问题标题】:Update prepopulated Room database更新预填充的房间数据库
【发布时间】:2020-10-22 02:03:44
【问题描述】:

假设我使用我的应用程序版本 1 交付了一个预填充的数据库。 预填充的数据库包含一个表“my_items”和列 item:

item
------
apple

对于应用程序版本 2,我提供了一个更新的预填充数据库,因此表“my_items”包括

item
------
apple
milk

如何确保新的预填充数据以非破坏性方式传输到应用程序的数据库? (用户可以自己向“my_items”插入新项目,我需要保留他的输入)。我阅读了Room migrations documentation,但似乎预填充的数据仅在破坏性迁移时读取,这不是我想要的,因为用户自己输入的项目将保持可用。

【问题讨论】:

    标签: android android-room database-migration


    【解决方案1】:

    Room 的内置迁移处理不支持将现有数据合并到新的预填充数据库中。

    一种可行的方法是为每个应用版本的预打包数据库文件指定一个唯一名称,例如my_items1.dbmy_items2.db 等。在应用程序版本 2 中,从预打包的数据库文件 my_items2.db 创建主数据库。然后打开以前版本的数据库作为单独的 Room 数据库实例,查询它以找到用户添加的项目,并将这些项目插入到新的主数据库中,并为新字段提供适当的默认值。此合并处理可以由主数据库的onCreate() 回调触发。合并处理应该在事务中完成。如果成功完成,您可以关闭并删除以前版本的数据库。如果发生故障,您需要通知用户并实施某种缓解处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多