java连接数据库 查询介于两个时间段内的日志

      最近做了一个酒店管理系统,里面涉及到好多以前没学过的知识,现在就是现学现用。有一个问题困惑了我好久,上网上找也没有特别满意的答案,自己总结并整理了一下。

      问题:如何查询日志中两个时间段的内容?

      我的日志数据表中的字段为:(可以看附件图片)log数据库设计

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;
 }

 

 

你可能感兴趣的:(java,sql)