#android #android-room
#Android #android-комната
Вопрос:
У меня есть база данных Room, в которой есть некоторые данные из retrofit, и я создаю поиск в этой базе, но этот метод поиска и работы, когда я пишу полное название (не слова). Например, я хочу выполнить поиск в Уганде, а мое приложение не может найти данные, отличные от тех, что есть в Уганде. Но когда я пишу «Уганда: 500 коров умирают из-за засухи» (ее полное название), мое приложение создает статью.
Это мой DAO и код, который я использую для поиска
//DAO
@Dao
public interface NewsDao {
@Query("SELECT * FROM news WHERE title LIKE :search OR content LIKE :search OR publishedAt LIKE :search ")
List<News> searchInDatabase(String search);
}
// part of code than searchs
@Override
public boolean onQueryTextChange(String newText) {
if (newText != null amp;amp; !newText.isEmpty()) {
newsAfterSearch = newsDao.searchInDatabase(newText);
displayData(newsAfterSearch);
} else displayData(news);
return false;
}
Комментарии:
1. При использовании
LIKE
вам нужно использовать подстановочные знаки.search
должно было бы бытьUganda%
. Смотрите документацию SQLite .
Ответ №1:
Вы можете использовать LIKE
в своих запросах:
SELECT column1, column2, ...
FROM table_name
WHERE column LIKE pattern;
например. Выберите всех клиентов с именем, начинающимся на a
:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
И в вашем случае, что-то вроде (выбирает всех клиентов с именем пользователя, у которых есть «или» в любой позиции) :
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
Ссылка: W3Schools