【问题标题】:Room Query BETWEEN dates doesnt return result房间查询 BETWEEN 日期不返回结果
【发布时间】:2019-10-19 09:36:58
【问题描述】:

我正在开发一个应用程序,我在其中练习使用 Room Persistence Library。 我有一个名为 expence 的类,基于它是具有字段 int amount 和 Date dob 等的数据库。 我的目标是使用下面的查询来返回这些日期之间所有条目的总和。

@Query("SELECT SUM(amount) FROM expence WHERE dob BETWEEN date( :start ) AND   date( :end )     ")
    int  newallexpensesFromTo(String start,String end);//

但在当前状态下,查询不返回任何内容,我想显示结果的文本视图 = 0;

我使用了来自 http://androidkt.com/datetime-datatype-sqlite-using-room/ 的指导 - 能够将字符串转换为日期并进行修订。

我已经检查过它可能是由于存储日期的格式不同,它与存储在数据库中的日期和传递给查询的日期相同。

这是我尝试获取条目总和的地方

value2 =db.expenceDao().newallexpensesFromTo(firstdayofmonth,lastdayofmonth);

我有一个类似的查询,其中没有日期,它返回所有条目。 当我添加费用时,我使用 DatePicker 将日期添加到数据库中的 dob。

当查询接收到带有日期的字符串时,预期的结果是接收在这些日期之间添加的条目的总和。

【问题讨论】:

    标签: android sqlite sorting android-room


    【解决方案1】:

    尝试将您的 startDateendDate 作为长时间戳值转换并插入到您的 expense 表中,而不是以其他格式存储它。

    现在在查询数据时,使用查询日期的时间戳值。

    例如,如果您希望 SUM(amount) 介于 01-05-201931-05-2019 之间,那么您的查询将类似于:

    @Query("SELECT SUM(amount) FROM expense WHERE dob BETWEEN :startDate AND :endDate")
    int  newAllExpensesFromTo(Long startDate,Long endDate);
    

    您的startDateendDate 值将分别类似于15566688001559260800

    【讨论】:

    • 非常感谢,它刚刚工作。我存储的日期和使用长查询一样长,它可以正常工作。
    • 嗨@Moldav,我的模型只有 dateString,如果我想存储 datelong,我需要先转换 dateString,但我从 Gson convert 获取数据(从 api 获取之后)。所以请教我如何将所有字符串转换为长字符串,谢谢
    【解决方案2】:

    现在你可以使用type converters

    Date 的文档中所述,您的 Java 转换器应如下所示

    public class Converters {
        @TypeConverter
        public static Date fromTimestamp(Long value) {
            return value == null ? null : new Date(value);
        }
    
        @TypeConverter
        public static Long dateToTimestamp(Date date) {
            return date == null ? null : date.getTime();
        }
    }
    

    要应用它们,请在继承自 RoomDatabase() 的类上方添加以下代码

    @TypeConverters({Converters.class})
    

    终于可以这样使用了

    @Query("SELECT SUM(amount) FROM expence WHERE dob BETWEEN :from AND :to")
    int newallexpensesFromTo(from: Date, to: Date)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多