安卓房间回退到破坏性迁移通过保留用户数据



我有一个Android应用程序,我正在使用资产中预先填充的数据库。如果我想保留用户的数据,并从预填充的数据库中添加任何新记录(如果有的话(,我想知道进行迁移的最佳方法是什么。(我想我需要将设备数据库中的记录与预先填充的记录进行比较(

我尝试过回退到破坏性迁移,但这种方法只是删除设备的数据库并从资产中复制新的数据库。(所以我正在丢失用户的数据(

标准的迁移方法很好,但我不知道如何在迁移过程中检查预填充的数据库中是否有新记录,并在迁移后将它们添加到设备的数据库中。

谢谢!

fallbackToDestinationMigration((方法将破坏性地重新创建数据库表,仅当找不到将旧数据库模式迁移到最新模式版本的迁移步骤时。

来源:房间文件

在您的情况下,假设您的DB的预存在版本是1,而您将提供的新版本是2,那么您从1到2的迁移步骤可以如下:

// Create a table for backup
CREATE TABLE myTable_backup(tableId VARCHAR,....);
// Copy old data to this backup table
INSERT INTO myTable_backup SELECT tableId,... FROM myTable;
// Delete old table
DROP TABLE myTable;
// Create the required table with new schema
CREATE TABLE myTable(tableId VARCHAR,....); 
// Insert pre-existing data to your new schema
// Overwrite might / might not happen based on your Primary key strategy
INSERT INTO myTable SELECT tableId,... FROM myTable_backup; 
// Delete the backup table
DROP TABLE myTable_backup;

迁移步骤可以根据此Room文档编写。

最新更新