在会议室中动态构建查询

时间:2018-11-05 12:30:33

标签: android sql sqlite android-room

问题

是否可以动态构建查询过滤条件?

问题

我有一个大名单,地址。用户可以通过在SearchView中键入文本来过滤它。如果用户在文本中放置任何空格,它将被分割,并且将分别搜索文本的两部分。我必须动态构建SQL,因为我不知道会有多少个空格字符。有什么方法可以在Room whit简单的@Query中进行处理,还是我必须使用@RawQuery?

示例SQL

SELECT * FROM ADDRESS WHERE (CITY LIKE '%abc%' OR STREET LIKE '%abc%') AND (CITY LIKE '%abc%' OR STREET LIKE '%def%') AND (....)

2 个答案:

答案 0 :(得分:0)

您可以在数组中传递这些单词

@Query("SELECT * FROM ADDRESS WHERE CITY LIKE(:keywords)") //customize your query here
List addresses(String[] keywords);

答案 1 :(得分:0)

我认为您应该使用RawQuery

由于查询很复杂并且不确定其持续时间,因此您可能应该在运行时构造它并执行它。 在编译时需要检查@Query的有效性,所以我认为您将很难以这种方式实现它。

此示例摘自文档:

@Dao
interface RawDao {
 @RawQuery
 User getUserViaQuery(SupportSQLiteQuery query);
}
 SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM User WHERE id = ?   LIMIT 1", new Object[]{userId});
 User user2 = rawDao.getUserViaQuery(query);