我有一个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
等...
如何将这部分添加到迁移中?
答案 0 :(得分:2)
您可以使用CASE将int val转换为字符串。它可以是冗长的代码,并且因为它是枚举,所以我假设您已经知道先前表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")