Room データベースはエンティティ内のブール変数をサポートしていますか? 質問する

Room データベースはエンティティ内のブール変数をサポートしていますか? 質問する

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)")
}

ご覧のとおり、追加される列は 型でありINTEGERNOT NULL属性とデフォルト値が必要です。

おすすめ記事