如何从不同的枚举类型迁移房间数据库

How to migrate Room Database from different Enum types

我有一个包含以下字段的房间数据库 table。

itemType: Int

由于我无法控制的变化,我需要将它保存为一个字符串。 即:

itemType: String

所以我像这样添加了一个数据库迁移:(这是我实际的抽象简化版本table)

database.execSQL("CREATE TABLE IF NOT EXISTS User_Backup (id TEXT NOT NULL, name TEXT NOT NULL, itemType TEXT NOT NULL, PRIMARY KEY(id))")
database.execSQL("INSERT INTO User_Backup(id,name) SELECT id,name FROM UserTable")
database.execSQL("DROP TABLE UserTable")
database.execSQL("ALTER TABLE User_Backup RENAME TO UserTable")

这很好地改变了 table 并将类型从 int 更改为 String 并保留所有其他数据。唯一的问题是我的 itemType 字段留空。

我不能按原样复制它,因为新数据应该映射到新结构。

例如:

1-> admin
2-> super user
3-> guest

等...

如何将这部分添加到迁移中?

您可以使用 CASE 将 int val 转换为 string。它可能是冗长的代码,并且由于它是枚举,所以我假设您已经知道先前 table itemType 的所有 int 值。你可以这样编码

database.execSQL("INSERT INTO User_Backup(id,name, itemType) SELECT id,name, CASE WHEN itemType == 1 THEN 'admin' WHEN itemType == 2 THEN 'super user' WHEN itemType == 3 THEN 'guest' .. ELSE 'else case value' END as itemType FROM UserTable")