Как реализовать массив строк в запросе? - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу получить данные из моей комнаты БД по следующему запросу:

  @Query("SELECT address.address_id, first_name, last_name, street, postal_code, city," +
"(SELECT employee.employee_id FROM employee WHERE employee.address_id = address.address_id) AS employee_id, " +
"(SELECT project.project_id FROM project WHERE project.address_id = address.address_id) AS project_id " +
"FROM address WHERE last_name IN (:pattern) OR first_name IN (:pattern) ORDER BY last_name ASC, first_name ASC") 
LiveData<List<AddressBookAddress>> loadAddressBookWithFilter(String... pattern);

Как видите, мой параметр принимает массив с одной или несколькими строками поиска.

Возьмем, к примеру, "max" и "muster"

Теперь я хочу получить все записи, которые содержат имена "max" или "muster" или фамилии "max" или "muster". Но в настоящее время я вообще не получаю никаких данных.

1 Ответ

0 голосов
/ 03 ноября 2018

Документы показывают, что это довольно просто. Посмотрите на Room Query docs . Там вы можете увидеть этот пример:

В качестве расширения аргументов привязки SQLite Room поддерживает привязку списка параметров к запросу. Во время выполнения Room создаст правильный запрос с соответствующим количеством аргументов привязки в зависимости от количества элементов в параметре метода.

@Query("SELECT * FROM user WHERE uid IN(:userIds)")
public abstract List findByIds(int[] userIds);

В приведенном выше примере, если userIds является массивом из 3 элементов, Room выполнит запрос следующим образом: SELECT * FROM user WHERE uid IN (?,?,?) И свяжет каждый элемент в массиве userIds с оператором .

Итак, измените подпись с «String ...» на «String []», чтобы четко указать наличие массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...