在使用java+spring+hibernate 架构开发项目时,遇到了需要按照日期查询数据库中数据的问题。经过查阅资料得到了一种解决办法,这里记录一下。
首先是讲一下主要实现思想:1、在函数中先获取到查询条件(即当前或目标日期字符串)2、把字符串转换成数据库里用的Date类型 3、构建查询语句并且执行获得目标数据。
代码如下:
//定义查询结果集
List<Acr330> results = new ArrayList<Acr330>();
//实现查询功能代码
//获取查询属性,当前仪表ID和当前时间
String temp = queMap.get("collectDate");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");//初始化日期格式,注意这里MM一点要大写,其他两个是小写
Date tempDate = new Date();
try{
tempDate = sdf.parse(temp);
}
catch (Exception e) {
e.printStackTrace();
}
java.sql.Date collectDate = new java.sql.Date(tempDate.getTime());
Integer collectTimehour = condition.get("collectTimehour");
Integer collectTimeMinute = condition.get("collectTimeMinute");
Integer collectTimeSecond = condition.get("collectTimeSecond");
String rtuId = queMap.get("rtuId");
//查询字符串
StringBuffer queryBuffer = new StringBuffer();
//查询语句
//queryBuffer.append("select ");
queryBuffer.append("from Acr330 ");
queryBuffer.append(" where 1=1 and collectDate = '"+collectDate+"' ");
//处理查询条件
if (-1<collectTimehour && collectTimehour<24)
{
queryBuffer.append("and collectTimehour = '"+collectTimehour+"' ");
}
if (-1<collectTimeMinute && collectTimeMinute<60)
{
queryBuffer.append("and collectTimeMinute = '"+collectTimeMinute+"' ");
}
if (-1<collectTimeSecond && collectTimeSecond<60)
{
queryBuffer.append("and collectTimeSecond = '"+collectTimeSecond+"' ");
}
if(rtuId!=null)
{
queryBuffer.append("and rtuId like '%"+rtuId+"%'");
}
//打印查询条件
System.out.println("sql="+queryBuffer);
results = this.simpleDAO.getDAOTemplate().find(queryBuffer.toString());