【问题标题】:Updating a Single Column In Room Database更新房间数据库中的单个列
【发布时间】:2022-06-20 04:54:50
【问题描述】:

这就是我用来更新的函数:

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

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

我指定了nightMode=,因为我认为这样我只是在更新这一列,但事实证明它会重置每一列,我如何更新单个列,同时保留其余列的值?

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    如果您要更新的是单列或几列,那么您可以编写自定义查询。

    在你的 dao 类中

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

    【讨论】:

      【解决方案2】:

      而不是创建新的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)
          }
      }
      

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2019-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-09
        • 2020-10-22
        • 1970-01-01
        相关资源
        最近更新 更多