我有一个表
todo_db
,其中有一列 dueDate
,我想运行一个查询来选择所有 dueDate
类似于给定日期的位置。
我在我的 Dao 中写了这个查询
@Query("SELECT * FROM todo_db WHERE dueDate LIKE :givenDate")
List<todoEnt> getGivenDate(Date givenDate);
要使用它,我调用数据库的实例,我使用 Calendar 的实例并使用 getTime()
Calendar c;
Date dateToday;
c = Calendar.getInstance();
dateToday = c.getTime();
datalist = db.Maindao().getGivenDate(dateToday);
我已经尝试过
SELECT * FROM todo_db WHERE dueDate = :givenDate
和
SELECT * FROM todo_db WHERE dueDate < (strftime('%s', 'now'))
感谢您提供的任何帮助。非常感谢!
编辑:
我有 TypeConverter 并且 dueDate 是 Date
@Entity(tableName = "todo_db")
public class todoEnt {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "title")
public String todoTitle;
@ColumnInfo(name = "description")
public String todoDescription;
@ColumnInfo(name = "dueDate")
public Date todoDueDate;
}
public class Convertors {
@TypeConverter
public Date fromTimeStamp(Long value){
return value == null ? null : new Date(value);
}
@TypeConverter
public Long dateToTimestamp(Date date){
return date == null ? null : date.getTime();
}
}
在方法中使用 long 而不是 date。请记住,房间内部将日期存储为长整数。
所以在你的 DAO 中你应该有类似的东西......
@Query("SELECT * FROM todo_db WHERE dueDate = :givenDateInLong")
getGivenDate(long givenDateInLong)
那么你的代码就会像...
Calendar c;
Date dateToday;
c = Calendar.getInstance();
dateToday = c.getTime();
long dateTodayInLong = dateToday.getTime();
datalist = db.Maindao().getGivenDate(dateTodayInLong);
我的例子是这样的。我使用从一天开始和一天结束开始的 2 个日期
@Query("Select * From Tillsession c where c.users=:user and c.status='ENDED' and (c.logout)>=:frm and c.logout<=:to")
List<Tillsession> getTillsessions(Users user, Date frm,Date to);
我使用日历类从一天的开始和一天的结束获得两个日期,如下所示
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date fromd = c.getTime();
c.set(Calendar.HOUR, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 999);
Date to = c.getTime();
getTillsessions(user, fromd,to);