Как выполнить поиск в базе данных Room

#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