【问题标题】:return sum and average using room返回总和和平均使用房间
【发布时间】:2018-06-11 15:48:46
【问题描述】:

我的表结构如下:

@Entity(tableName = "userFitnessDailyRecords")

public class UserFitnessDailyRecords {



    @NonNull
    @PrimaryKey
    private Date forDay;
    private int stepCount;
}

我写的求和和平均值的查询如下:

@Dao
public interface UserFitnessDailyRecordsDao {


    @Query("SELECT SUM(stepCount), AVG(stepCount) FROM userFitnessDailyRecords where forDay BETWEEN :startDay AND :endDay ORDER BY forDay ASC")
    UserFitnessDailyRecords getUserFitnessSumAndAverageForLastThirtyDays(Date startDay, Date endDay);


    @Query("DELETE FROM userFitnessDailyRecords")
    void deleteUserFitnessDailyRecord();

}

编译时出现无法返回值的错误,因为列不包含总和和平均字段。在这种情况下如何返回总和和平均值?

【问题讨论】:

    标签: android database android-room android-database


    【解决方案1】:

    您正在从方法 getUserFitnessSumAndAverageForLastThirtyDays() 返回一个 UserFitnessDailyRecords 条目。但是您的查询选择的列没有返回那种对象。

    记住在 SQL 查询中使用“AS”关键字来生成与 POJO 变量名称匹配的列名别名。

    您可以从该方法返回一个 POJO,可能是这样的:

    Kotlin 方式:

    data class SumAveragePojo(var total: Float, var average: Float)
    

    Java 方式:

    class SumAveragePojo
    { 
        public float total;
        public float average;
    }
    

    并像这样更改方法返回类型:

    @Query("SELECT SUM(stepCount) as total, AVG(stepCount) as average FROM userFitnessDailyRecords where forDay BETWEEN :startDay AND :endDay ORDER BY forDay ASC")
    SumAveragePojo getUserFitnessSumAndAverageForLastThirtyDays(Date startDay, Date endDay);
    

    【讨论】:

    • 我已经在使用 pojo 不知道使用“as”的列名别名。这有效:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2016-09-18
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多