【问题标题】:Getting null from room database sum query, with data available从房间数据库总和查询中获取空值,有可用数据
【发布时间】:2023-03-05 15:26:01
【问题描述】:

我的 dao 中有两个函数

    @Query("select sum(amount) as sum, dateString from databasetransaction where txnType='A' group by dateString")
    fun getExpensesTransaction(): LiveData<List<TxnByDate>>

    @Query("select COALESCE(sum(COALESCE(amount,0)), 0) from databasetransaction")
    fun getTotal() : LiveData<Int>

对于第一个查询,我使用对象获取数据

{
  sum:2000,
  dateString:"04/10/2019"
}

对于第二个查询,我得到 null 作为值,有人可以帮助我吗,我在这里做错了什么?

【问题讨论】:

    标签: android kotlin android-room android-livedata


    【解决方案1】:

    我怀疑问题可能不在于查询本身,而在于处理结果并将其放入 Int 中。

    我认为您根本不需要 COALESCE,当然不会出现两次,因为 total 聚合函数与 sum 函数的不同之处在于它不会返回null,根据 :-

    sum() 和 total() 聚合函数返回组中所有非 NULL 值的总和。如果没有非 NULL 输入行,则 sum() 返回 NULL,但 total() 返回 0.0。 sum(X) total(X)

    上面的结果是我怀疑正在发生的事情。你得到一个带小数点的浮点数,然后不能转换为 Int 并且返回 null。

    您可以尝试使用:-

    SELECT CAST(total(amount) AS INTEGER) from databasetransaction;
    

    【讨论】:

    • 解决了,这实际上是我的视图模型的问题,我没有使用从第二个查询中获取结果的变量,因此,一旦我打开观察者,它就为空它或数据绑定它开始工作了
    • 你能添加你的视图模型类吗?因为我也面临同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多