Помещение: могу ли я проверить передаваемое значение для запроса на NULL? - PullRequest
0 голосов
/ 29 августа 2018

Я использую Room libs, имею DB Stations и хочу выполнить запрос, чтобы получить Stations с / без фильтра.

UPD. У меня есть DAO, и я хочу получить все записи, когда мой массив (groupIds) равен нулю или пуст, и получить отфильтрованный список, если в списке есть один элемент массива.

@Query("SELECT * FROM $STATIONS_TABLE_NAME WHERE ((:groupIds) IS NULL OR $GROUP_ID IN(:groupIds))
fun getStationsWithFilter(groupIds: IntArray?): Flowable<List<DbStation>>

В этот момент у меня возникла проблема

08-29 16:09:00.139 9508-9508/->BaseActivity: showError: exception - near ",": syntax error (code 1): , while compiling: SELECT * FROM Stations WHERE ((?,?,?,?,?,?,?,?,?,?) IS NOT NULL

Итак,

1) Могу ли я проверить нулевое передаваемое значение для запроса и динамически изменить запрос SQL?

2) если да - какой у меня синтаксис?

1 Ответ

0 голосов
/ 30 августа 2018

Сделка была в этой части SQL-запроса

WHERE ((:groupIds) IS NULL 

groupIds - это массив, и у меня было синтаксическое исключение в этом месте.

Мой обходной путь: я начал передавать 2 параметра для запроса вместо 1, первый - String как флаг Nullable (я думаю, это может быть прямой логический тип), а второй - массив Int для второго предложения.

@Query("SELECT * FROM $STATIONS_TABLE_NAME WHERE :nullableFlag IS NULL OR $GROUP_ID IN (:groupIds))
fun getStationsWithFilter(nullableFlag: String?, groupIds: IntArray?): Flowable<List<DbStation>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...