如何在查询中实现字符串数组?

时间:2018-11-02 14:26:24

标签: android sql android-room

我想通过以下查询从我的房间数据库中获取数据:

  @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”的记录。但是目前,我什么都没有收到。

2 个答案:

答案 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>