更新预填充的会议室数据库

时间:2020-07-01 15:14:20

标签: android android-room database-migration

想象一下,我提供了一个预填充的数据库,其中包含我的应用程序版本1。 预填充的数据库包括带有列项目的表“ my_items”:

item
------
apple

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

item
------
apple
milk

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

1 个答案:

答案 0 :(得分:0)

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

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