最近做了一个酒店管理系统,里面涉及到好多以前没学过的知识,现在就是现学现用。有一个问题困惑了我好久,上网上找也没有特别满意的答案,自己总结并整理了一下。
问题:如何查询日志中两个时间段的内容?
我的日志数据表中的字段为:(可以看附件图片)
Log:logId<pk>,userId<fk>enterId<fk>,operation(操作),logTime,logRemark
这里利用了一个to_date函数,将前台传过来的字符传类型的时间转化成Date类型,注意这里的写法,包括\'要用反斜杠等
/**
* 查询介于两个时间段内的日志
* @param startTime,endTime
* @throws SQLException
*/
public ArrayList<Log> selectLog(String startTime, String endTime){
String sql = "select * from log where logtime> to_date(" + "\'" +startTime + "\'" + ",'yyyy/mm/dd')" +
" and logtime < to_date(" + "\'" + endTime +"\'"+",'yyyy/mm/dd')";
}
这里也可以用timestamp类型,可以精确到时分秒。注意这里的写法。TO_timestamp_tz是将String类型的时间转化成timestamp类型,用于在数据库中进行查询
/*public ArrayList<Log> selectLog(String startTime, String endTime){
Timestamp startTs = Timestamp.valueOf(startTime);
Timestamp endTs = Timestamp.valueOf(endTime);
String sql = "select * from log where logtime> TO_timestamp_tz(\'" +startTs + "\','yyyy-mm-dd HH24:MI:SS.FF')" +
" and logtime < TO_timestamp_tz(\'" + endTs + "\','yyyy-mm-dd HH24:MI:SS.FF')";*/
ResultSet rs = this.getRs(sql);
Log log = new Log();
ArrayList<Log> logs = new ArrayList<Log>();
try{
while(rs.next()){
log.setLogId(rs.getInt(1));
log.setUserId(rs.getInt(2));
log.setEnterId(rs.getInt(3));
log.setOperation(rs.getString(4));
log.setLogTime(rs.getDate(5));
log.setLogRemark(rs.getString(6));
}
logs.add(log);
}catch(SQLException e){
e.printStackTrace();
}
System.out.println("您要的时间短呢所对应的log已经找到");
for(int i = 0; i< logs.size(); i++){
System.out.println("logid为:" + logs.get(i).getLogId());
System.out.println("enterid为:" + logs.get(i).getEnterId());
System.out.println("operation为:" + logs.get(i).getOperation());
System.out.println("logtime为:" + logs.get(i).getLogTime());
System.out.println("logremark为:" + logs.get(i).getLogRemark());
System.out.println();
}
return logs;
}