我知道sqlite不支持Boolean,我们需要使用int列来模仿Boolean的行为。但是Room是否支持布尔值?如果我的实体中有布尔值怎么办?它会按预期工作吗?
答案 0 :(得分:8)
是的。当您使用room存储布尔值时,它会自动存储1 for true
和0 for false
。
阅读时的情况相同。它将1或0分别转换为true / false。
答案 1 :(得分:2)
添加上面@Pankaj Kumar 的回答,我想举一个迁移的例子,其中添加了一个布尔列:原始实体
@Entity(tableName = TABLE_NAME)
data class SessionEntity(
@PrimaryKey(autoGenerate = true) var key: Int = 0,
@ColumnInfo(name = "start_datetime") val startDatetime: String,
@ColumnInfo(name = "end_datetime") val endDatetime: String,
) {
companion object {
const val TABLE_NAME = "sessions"
}
}
更新实体(添加布尔列)
@Entity(tableName = TABLE_NAME)
data class SessionEntity(
@PrimaryKey(autoGenerate = true) var key: Int = 0,
@ColumnInfo(name = "start_datetime") val startDatetime: String,
@ColumnInfo(name = "end_datetime") val endDatetime: String,
@ColumnInfo(name = "uploaded_attempted") val uploadAttempted: Boolean, //new Boolean column added
) {
companion object {
const val TABLE_NAME = "sessions"
}
}
这是我为它写的迁移
val MIGRATION_1_2 = object : Migration(1,2){
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE $TABLE_NAME ADD COLUMN uploaded_attempted INTEGER NOT NULL DEFAULT(0)")
}
可以看出,添加的列的类型为 INTEGER
,它需要一个 NOT NULL
属性和一个默认值。