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

Android 如何从不同的枚举类型迁移房间数据库,android,android-sqlite,database-migration,android-room,Android,Android Sqlite,Database Migration,Android Room,我有一个包含以下字段的房间数据库表 itemType: Int 由于无法控制的更改,我需要将其保存为字符串。 i、 e: 因此,我添加了一个数据库迁移,如下所示:(这是我实际表的一个抽象简化版本) 这很好地改变了表,将类型从int更改为String,并保留了所有其他数据。唯一的问题是我的itemType字段留空 我不能按原样复制它,因为新数据应该映射到新结构 例如: 1-> admin 2-> super user 3-> guest 等等 如何将此部分添加到迁移中?您可以

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

itemType: Int
由于无法控制的更改,我需要将其保存为字符串。 i、 e:

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

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

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

例如:

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


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

您可以使用CASE将int val转换为string。它可能是很长的代码,因为它是enum,所以我假设您已经知道前面表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")

我有无数种不同的情况,所以我将自动生成SQL语句,而不是键入它。但是这个看起来不错,谢谢。
1-> admin
2-> super user
3-> guest
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")