【问题标题】:room db update multiple rows with @queryroom db 使用@query 更新多行
【发布时间】:2018-12-05 11:06:07
【问题描述】:

我想更新房间数据库中的多行。但我没有对象 - 我只有 ID。

如果我更新一行,我会在我的 DAO 中写下这样的内容:

@Query("UPDATE items SET place = :new_place WHERE id = :id;")
fun updateItemPlace(id:Int, new_place:String)

如果有多行,我需要这样的东西:

@Query("UPDATE items SET place = :new_place WHERE id = :ids;")
fun updateItemPlaces(ids:List<Int>, new_place:String)

@Query("UPDATE items SET place = :new_place WHERE id IN :ids;")
fun updateItemPlaces(ids:String, new_place:String)

我在我的 ids-String 中写了类似 '(1,4,7,15)' 的东西

谁能告诉我进行此类更新的好方法

因为类似

val ids = ListOf(1,4,7,15)
ids.forEach{
    itemDao.updateItemPlace(it,'new place')
}

似乎不是一个好的解决方案

【问题讨论】:

    标签: android kotlin sql-update android-room


    【解决方案1】:
    @Query("UPDATE items SET place = :new_place WHERE id IN (:ids)")
    fun updateItemPlaces(ids:List<Int>, new_place:String)
    

    但请记住,如果您的 id 列表包含超过 999 个项目,SQLite 会抛出异常:

    SQLiteException too many SQL variables (Sqlite code 1)

    【讨论】:

      【解决方案2】:

      这是你工作所需要的。

          @Query("Update brand_table set  name = :name where id In (:ids)")
          void updateBrands(List<Integer> ids, String name);
      

      【讨论】:

        猜你喜欢
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        相关资源
        最近更新 更多