当Room新增字段类型为对象的时候,该怎么更新呢?

262 阅读1分钟

实体类Word

@Entity(tableName = "word_table")
data class Word(
    @ColumnInfo(name = "word")
    val word: String,

    @Embedded
    val ext: WordExt,

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    var id: Long = 0
)

其中ext是我新增的一个字段:

data class WordExt(
    val length: Int,
    val size: Int
)

在升级数据库的时候,要这样升级:

private val MIGRATION_1_2 = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE word_table ADD COLUMN length INTEGER NOT NULL DEFAULT 0 ")
                database.execSQL("ALTER TABLE word_table ADD COLUMN size INTEGER NOT NULL DEFAULT 0 ")
            }
        }

很简单,就是将WordExt中的属性lengthsize直接新增到表word_table中。