簡體   English   中英

更新房間數據庫中的單個列

[英]Updating a Single Column In Room Database

這就是我用於更新的功能:

private fun updateSettingsDatabase(settingsDao: SettingsDao) {
        lifecycleScope.launch {
            settingsDao.update(SettingsEntity(
                1,
                nightMode=nightModeResult,
            ))
        }
}

@Query("SELECT * FROM `settings-table`")
fun fetchCurrentSettings(): Flow<List<SettingsEntity>>

我指定nightMode=因為我認為這樣我只更新此列,但事實證明它會重置每一列,我如何更新單個列,同時保留其余列的值?

如果您要更新單個或幾列,那么您可以編寫自定義查詢。

在你的道課上

@Query("UPDATE settings-table SET nightMode = :nightModeResult WHERE id = :id")
fun updateNightMode(id: Int, nightModeResult: Any): Int

而不是創建新的SettingsEntity對象。 首先嘗試獲取確切的對象,然后將值更新到其中,最后更新到 Dao。

例如,

@Query("SELECT * FROM `settings-table` where id=:id")
fun getSettingEntityById(id: Int): Flow<SettingsEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun update(entity: SettingsEntity)


private fun updateSettingsDatabase(settingsDao: SettingsDao) {
    val entity = settingsDao.getSettingEntityById(1) // Replace 1 with exact id
    entity.updateValue(newValue)

    lifecycleScope.launch {
        settingsDao.update(entity)
    }
}

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM