Динамически построить запрос в комнате - PullRequest
0 голосов
/ 05 ноября 2018

Вопрос

Можно ли динамически построить фильтрацию для запроса?

Проблема

У меня большой список адресов. Пользователь может отфильтровать его, набрав текст в 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 (....)

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Я думаю, что вы должны использовать 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);
0 голосов
/ 05 ноября 2018

Вы можете передать эти слова в массиве

@Query("SELECT * FROM ADDRESS WHERE CITY LIKE(:keywords)") //customize your query here
List addresses(String[] keywords);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...