首页 > 解决方案 > RoomDB Android 上特定字段的 @Update 未正确更新

问题描述

RoomDB Android 上特定字段的 @Update 未正确更新

插入时正常工作 在此处输入图像描述

调用 logger.updateLog(key, msg) 时,房间数据库没有更新我应该改用常见的@query 吗? 在此处输入图像描述 使用数据库检查器 在此处输入图像描述

在道班

@Dao
interface LogDao {

    @Update(onConflict = OnConflictStrategy.REPLACE)
    fun updateLog(obj: Log)

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(vararg logs: Log)

在 impl 类中

override fun addLog(key: String, msg: String) {
        executorService.execute {
            logDao.insert(
                Log(
                    msg,
                    key,
                    System.currentTimeMillis()
                )
            )
        }
    }

    override fun updateLog(key: String, msg: String) {
        executorService.execute {
            logDao.updateLog(
                Log(
                    msg,
                    key,
                    System.currentTimeMillis()
                )
            )
        }
    }

在演示者中

fun saveRecord(
        key: String,
        msg: String
    ) {
        logger.isContainKey(key) {
            if (it) {
                logger.updateLog(key, msg)
            } else
                logger.addLog(key, msg)
        }
    }

标签: androidsqlandroid-room

解决方案


对于我的情况,只想更新字段键是否相同

这段代码对我来说很好

@Query("UPDATE logs SET timestamp = :timestamp, msg = :msg WHERE `key` = :key")
fun forceUpdate(msg: String,key: String,timestamp:Long)

fun updateLog(log:Log){
    forceUpdate(log.msg,log.key,log.timestamp)
}

推荐阅读