sqlite は Boolean をサポートしていないので、 Boolean の動作を模倣するには int 列を使用する必要があることはわかっています。しかし、Room は Boolean をサポートしていますか? エンティティに Boolean がある場合はどうなりますか? 期待どおりに動作しますか?
ベストアンサー1
はい、そうです。room を使用してブール値を保存すると、自動的に1 for true
とが保存されます0 for false
。
読み取り時も同様です。1 または 0 をそれぞれ true/false に変換します。
編集:ブール列が追加された移行の例を挙げて、この回答に追加したいと思います:元のエンティティ
@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
属性とデフォルト値が必要です。