【问题标题】:Return type of GROUP BY statement in Room DatabaseRoom 数据库中 GROUP BY 语句的返回类型
【发布时间】:2020-06-18 22:04:09
【问题描述】:

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

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 列的表? --> 即 [type, count(type)] ?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    第 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,因此您需要自己处理该方面,无论是在观察者中还是通过包装您从 DAO 获得的 LiveDataMediatorLiveData 并执行转换。

    【讨论】:

    • 太棒了!那成功了。我不知道查询和字段之间存在绑定。谢谢!
    • 太棒了!我需要在我的选择语句中使用“COUNT(*) as count”来映射到返回类中的计数变量
    • 你应该包括 @ColumnInfo(name = "type")@ColumnInfo(name = "count") 所以即使在字段获取之后在发布版本中进行了混淆,它应该可以正常工作。
    猜你喜欢
    • 2012-04-24
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多