Room 数据库中 GROUP BY 语句的返回类型

to_*_*sam 2 sqlite android

我想对我的数据库进行以下查询:

SELECT type, COUNT(*) FROM offerings GROUP BY type
Run Code Online (Sandbox Code Playgroud)

此查询适用于 Sqlite 浏览器。现在我想在我的中使用这个查询Dao

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

但我收到错误:...不确定如何将游标转换为该方法的返回类型

如何查询包含 2 列的表?--> 即 [type, count(type)] ?

Com*_*are 7

步骤#1:为计数命名:SELECT type, COUNT(*) AS count FROM offerings GROUP BY type

步骤#2:创建一个具有合适字段的 Java 类:

public class Thingy {
  public String type;
  public int count;
}
Run Code Online (Sandbox Code Playgroud)

步骤#3:让 DAO 方法的返回类型使用该类:

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

我不记得 Room 支持返回 a Map,因此您需要自己处理该方面,无论是在观察者中还是通过MediatorLiveData包装LiveData从 DAO 获得的数据并进行转换。