使用预填充的DB进行房间迁移-fallbackToDestructiveMigration是我唯一的选择吗?

问题描述

我的数据库中有几个表,其中一些表包含用户无法更改的预填充内容,而其他表仅由用户填充。 现在,我想更新预先填充的静态内容,但保留用户生成内容

这个Android developer guide说了有关我的问题的以下内容

由于存在从版本2到版本3的实现的迁移路径,因此Room运行定义的migration()方法将设备上的数据库实例更新到版本3,从而保留数据库中已经存在的数据。 Room不使用预打包的数据库文件,因为Room仅在进行回退迁移时才使用预打包的数据库文件

因此,这意味着我无法进行以下操作:例如,从X,y和Z的3列中删除X和Z列,并使用更新后的数据库文件中的新内容重新创建它们,同时保持Y列不变? / p>

下面是问题的说明。

Visualization of the question for better understanding


现在我只有2个选项是对的吗?

  1. 完全删除表,使用户丢失其生成内容,因此他们可以拥有更新的预填充内容
  2. 为新结构编写迁移,但最终以空列X.2和Z.2结尾,因为Room将忽略我预先填充的DB 2.0

解决方法

看看这个库,也许它可以帮助您解决这个问题

https://github.com/ueen/RoomAssetHelper

您可以命名应保留的表和列,然后重命名现有数据库,复制新数据库并传输指定的列。