繁体   English   中英

房间数据库,SELECT * FROM 表由给定的一天

[英]Room database, SELECT * FROM table by a given day

我在我的 Android 项目中使用Room Persistence Library ,并使用日期类型转换器存储日期:

object DateConverter {
    @TypeConverter
    @JvmStatic
    fun fromTimestamp(value: Long?): Date? = if (null == value) null else Date(value)

    @TypeConverter
    @JvmStatic
    fun dateToTimestamp(date: Date?): Long? = date?.time
}

如何使用Room DAO在给定日期前从我的表中进行选择?

 @Query("SELECT * FROM table_name WHERE date BETWEEN :dayst AND :dayet")
 Object getFromTable(long dayst, long dayet);

日期dayst将是 00:00 的时间戳,即09/11/2017 00:00:00

date dayet将是 23:59 的时间戳,即09/11/2017 23:59:59

Object是您从数据库中获取的内容。

让它更简单。

  @Query("SELECT * FROM table_name WHERE date BETWEEN :daystart AND :dayend")
List<Student> fetchAllData(long start,long end);

我已经通过微调器获取了日、月和年的价值。 您可以像这样使用它(使用字符串和 DateTypeConvertor 而不是 Long)

在道:

@Query("SELECT * FROM MILKMANTABLE WHERE strftime('%Y',date) IN(:year) AND strftime('%m',date) IN(:month) AND strftime('%d',date) IN(:day)")

List<MilkMan> getMonthDetails(String day, String month, String year);

您可以使用此转换器类将日期类型转换并保存为房间表中的字符串

DateTypeConverter :

public class DateConverter {
    static DateFormat df = new SimpleDateFormat(Constants.DOB_FORMAT);

    @TypeConverter
    public static Date fromTimestamp(String value) {
        if (value != null) {
            try {
                return df.parse(value);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        } else {
            return null;
        }
    }

    @TypeConverter
    public static String dateToTimestamp(Date value) {

        return value == null ? null : df.format(value);
    }
}

在 Constants.java:

public static String DOB_FORMAT = "YYYY-MM-dd";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM