我有一个安卓系统的数据库,其中有一个房间,我从中删除了一个专栏.我当时正在进行迁移,我发现这并不像删除一列那么简单.
然后我看到,我必须采取一系列步骤,创建一个临时表,该表稍后将成为具有删除列的新表,但问题是,该表包含一个字符串数组字段,我不知道如何在SQL中声明该字段.
@Entity(tableName = "recipe_table")
data class RecipesDb(
@PrimaryKey
@ColumnInfo(name = "id")
val id: Long,
@ColumnInfo(name = "name")
val name: String,
@ColumnInfo(name = "category")
val category: List<String>,
@ColumnInfo(name = "isRecommended")
val isRecommended: Boolean,
@ColumnInfo(name = "images")
val images: List<String>,
@ColumnInfo(name = "ingredients")
val ingredients: List<String>,
@ColumnInfo(name = "date")
val date: Long,
@ColumnInfo(name = "time")
val time: Int,
@ColumnInfo(name = "difficult")
val difficult: String,
@ColumnInfo(name = "originalUrl")
val originalURL: String? = null,
@ColumnInfo(name = "author")
val author: String,
@ColumnInfo(name = "siteName")
val siteName: String
)
现在我已经删除了ingredients
列.我想做这样的事情:
private val MIGRATION_3_2 = object : Migration(3,2) {
override fun migrate(database: SupportSQLiteDatabase) {
//Drop column isn't supported by SQLite, so the data must manually be moved
with(database) {
execSQL("CREATE TABLE Users_Backup (id INTEGER, name TEXT, PRIMARY KEY (id))")
execSQL("INSERT INTO Users_Backup SELECT id, name FROM Users")
execSQL("DROP TABLE Users")
execSQL("ALTER TABLE Users_Backup RENAME to Users")
}
}
}
但是,当我声明新的临时表User_Backup时,我不知道如何指定其中一个字段是array.最后,我可以通过Room的自动迁移和创建一个界面来实现这一点,但我也想知道如何以这种方式实现.