更新房间数据库中的单列
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=
是因为我认为这样我只会更新此列,但事实证明它会重置每一列,我如何更新单个列,同时保留其余值列数?
而不是创建新的 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)
}
}
希望这对您有所帮助:)
如果您要更新的是单个或几个列,那么您可以编写自定义查询。
在你的道里class
@Query("UPDATE settings-table SET nightMode = :nightModeResult WHERE id = :id")
fun updateNightMode(id: Int, nightModeResult: Any): Int
这就是我用于更新的函数
private fun updateSettingsDatabase(settingsDao: SettingsDao) {
lifecycleScope.launch {
settingsDao.update(SettingsEntity(
1,
nightMode=nightModeResult,
))
}
}
@Query("SELECT * FROM `settings-table`")
fun fetchCurrentSettings(): Flow<List<SettingsEntity>>
我指定 nightMode=
是因为我认为这样我只会更新此列,但事实证明它会重置每一列,我如何更新单个列,同时保留其余值列数?
而不是创建新的 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)
}
}
希望这对您有所帮助:)
如果您要更新的是单个或几个列,那么您可以编写自定义查询。
在你的道里class
@Query("UPDATE settings-table SET nightMode = :nightModeResult WHERE id = :id")
fun updateNightMode(id: Int, nightModeResult: Any): Int