如何从不同的枚举类型迁移会议室数据库

我有一个Room数据库表,其中包含以下字段。

itemType: Int

由于无法控制的更改,我需要将其另存为字符串。 即:

itemType: String

所以我添加了一个数据库迁移,如下所示:(这是我的实际表的抽象简化版本)

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")

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

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

例如:

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

等...

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

sgq0611 回答:如何从不同的枚举类型迁移会议室数据库

您可以使用CASE将int val转换为字符串。它可以是冗长的代码,并且因为它是枚举,所以我假设您已经知道先前表itemType的所有int值。您可以像这样编码

database.execSQL("INSERT INTO User_Backup(id,name,itemType) SELECT id,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")
本文链接:https://www.f2er.com/3132186.html

大家都在问