我正在尝试在我的会议室数据库上创建一个迁移,这意味着添加一个名为“名称”的新列。
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
中插入一个新值,该值应该是格式化hours
,minutes
和seconds
答案 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
}