问题
是否可以动态构建查询过滤条件?
问题
我有一个大名单,地址。用户可以通过在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 (....)
答案 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);