【问题标题】:Dynamically build query in Room在 Room 中动态构建查询
【发布时间】:2018-11-05 12:30:33
【问题描述】:

问题

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

问题

我有一个很大的列表,地址。用户可以通过在 SearchView 中键入文本来过滤它。如果用户在文本中放置任何空格,它将被分割,文本的两部分将被单独搜索。我必须动态构建 SQL,因为我不知道会有多少个空格字符。有什么方法可以在 Room 中使用简单的 @Query 来处理这个问题,或者我必须为此使用 @RawQuery?

示例 SQL

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

【问题讨论】:

    标签: android sql sqlite android-room


    【解决方案1】:

    我认为你应该做的是使用RawQuery

    由于您的查询很复杂并且您不确定它有多长,您可能应该在运行时构造它并执行它。 Room 在编译时检查 @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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-04-09
        • 1970-01-01
        • 2012-11-23
        • 2018-04-18
        • 1970-01-01
        • 2019-04-08
        • 2012-12-21
        • 2018-12-21
        • 1970-01-01
        相关资源
        最近更新 更多