Room db使用@query更新多行

时间:2018-12-05 11:06:08

标签: android kotlin sql-update android-room

我想更新会议室数据库中的多行。但是我没有对象-我只有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)

OR

@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')
}

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

3 个答案:

答案 0 :(得分:1)

这就是完成工作所需要的。

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

答案 1 :(得分:0)

@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 :(得分:0)

非常感谢您回答这两个问题-我希望这会很容易,但是我无法通过互联网搜索找到类似的东西。