【问题标题】:How do I update columns of a Room entity only if it's null?只有当它为空时,如何更新 Room 实体的列?
【发布时间】:2018-03-14 17:54:44
【问题描述】:

有没有办法更新实体的列仅当列为空?这是我的 DAO 界面中的更新函数:

@Query("UPDATE media SET media_name = :mediaName, media_data = :mediaData WHERE id = :id")
fun update(id: Int, mediaName: String?, mediaData: String?)

...因为到目前为止,这些列的值“null”已更新。

【问题讨论】:

  • 你的意思是UPDATE media SET media_name = :mediaName, media_data = :mediaData WHERE id = :id AND media_name IS NULL AND media_data IS NULL
  • @CommonsWare 很抱歉不清楚,但非空参数几乎只更新到数据库,所以就像 @Query("UPDATE media SET media_name = :mediaName, media_data = :mediaData WHERE id = :id AND :mediaName IS NOT NULL AND :mediaData IS NOT NULL") 一样,只是这不起作用
  • 嗯,在调用 update() 之前检查这些值上的 null
  • @CommonsWare 是的,这就是我的想法,但想知道是否有更理想的 SQL 替代方案。谢谢马克:-)

标签: android android-sqlite android-room android-database android-architecture-components


【解决方案1】:

你可以试试:

@Query("UPDATE media SET media_name = (CASE WHEN media_name IS NULL THEN :mediaName ELSE media_name END), media_data = (CASE WHEN media_data IS NULL THEN :mediaData ELSE media_data END) WHERE id = :id")
fun update(id: Int, mediaName: String?, mediaData: String?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多