我想通过以下查询从我的房间数据库中获取数据:
@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”的记录。但是目前,我什么都没有收到。
答案 0 :(得分:0)
文档显示它非常简单。查看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 []”以明确说明数组的存在。
答案 1 :(得分:0)
this page上没有关于kotlin的文档,但是您可以将其用于相同的代码。
@Query("SELECT * FROM employee WHERE id IN(:idList)")
fun getAllSelectedEmployee(idList:Array<String?>): List<Model>