房间迁移添加列的值取决于现有的值

时间:2019-05-02 12:52:10

标签: android android-room

我正在尝试在我的会议室数据库上创建一个迁移,这意味着添加一个名为“名称”的新列。

override fun migrate(database: SupportSQLiteDatabase) {
    database.execSQL("ALTER TABLE TimerEntry ADD COLUMN name TEXT NOT NULL")
}

该值不能为null,我希望根据其他列的值来计算默认值。

这是我的实体:

@Entity
data class TimerEntry (var hours: Int, var minutes: Int, var seconds: Int, var name: String = String.format("%02d:%02d:%02d", hours, minutes, seconds))

如您所见,如果未提供name,则其值是根据其他参数的值计算的。我希望自己的迁移做同样的事情:在name中插入一个新值,该值应该是格式化hoursminutesseconds

的结果

1 个答案:

答案 0 :(得分:1)

您不能仅使用SQL来做到这一点。

我认为最好的方法是在ALTER TABLE中分配一个默认值,然后为每一行计算name值,然后将更新后的模型插入数据库。

override fun migrate(database: SupportSQLiteDatabase) {
    database.execSQL("ALTER TABLE TimerEntry ADD COLUMN name TEXT NOT NULL DEFAULT 'tmp'")

    // Get all TimerEntry rows
    // Compute and assign name field
    // Update database
}