Тип возврата оператора GROUP BY в базе данных комнат - PullRequest
1 голос
/ 19 июня 2020

Я хотел бы сделать следующий запрос к моей базе данных:

SELECT type, COUNT(*) FROM offerings GROUP BY type

Этот запрос хорошо работает с браузером Sqlite. Теперь я хочу использовать этот запрос в моем Dao:

@Query("SELECT type, COUNT(*) FROM offerings GROUP BY type")
LiveData<Map<String, Integer>> getOfferingsGroupedByType();

Но я получаю сообщение об ошибке: ... не знаю, как преобразовать курсор в возвращаемый тип этого метода

Как я могу запросить таблицу с 2 столбцами? -> то есть [тип, количество (тип)]?

1 Ответ

1 голос
/ 19 июня 2020

Шаг №1: Дайте имя счетчику: SELECT type, COUNT(*) AS count FROM offerings GROUP BY type

Шаг №2: Создайте класс Java с подходящими полями:

public class Thingy {
  public String type;
  public int count;
}

Шаг №3: Попросите ваш тип возврата из метода DAO использовать этот класс:

@Query("SELECT type, COUNT(*) FROM offerings GROUP BY type")
LiveData<List<Thingy>> getOfferingsGroupedByType();

Я не помню, чтобы Room поддерживал возврат Map, поэтому вам нужно будет обработать этот аспект самостоятельно, либо в наблюдателе, либо через MediatorLiveData, который обертывает LiveData, полученный от DAO, и выполняет преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...