номер базы данных обновить несколько строк с помощью @query - PullRequest
0 голосов
/ 05 декабря 2018

Я хотел бы обновить несколько строк в базе данных комнаты.Но у меня нет объектов - у меня есть только идентификаторы.

Если я обновляю одну строку, я записываю что-то вроде этого в свой 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)

, где я пишу что-то вроде '(1,4,7,15)' для моей id-String

Может кто-нибудь сказать мне хороший способ сделать такое обновление

, потому что что-то вроде

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

не кажется хорошим решением

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018
@Query("UPDATE items SET place = :new_place WHERE id IN (:ids)")
fun updateItemPlaces(ids:List<Int>, new_place:String)

Но имейте в виду, если ваш список идентификаторов содержит более 999 элементов, SQLite выдаст исключение:

SQLiteException too many SQL variables (Sqlite code 1)

0 голосов
/ 05 декабря 2018

Это то, что вам нужно для выполнения вашей работы.

    @Query("Update brand_table set  name = :name where id In (:ids)")
    void updateBrands(List<Integer> ids, String name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...