JavaSQL配置文件查询条件匹配字段是Date时注意事项
2017-07-26 14:05
471 查看
今天在调试一个功能时出现一个问题,有一个调Dao返回泛型List的简单代码,传入两个查询参数,分别为String和Date类型。
在生产环境传入时间等参数查询时总是查不到数据,实际上表中是有数据的,将语句加上查询条件捞出来放到数据库是能查出来数据的。
后来才发现是因为代码中传的date类型参数只精确到秒,毫秒级别不是零导致查询匹配不上,所以在用date类型进行比较时一定要记得毫秒位,或者就用时间戳格式进行比较,或者限制一个精确到毫秒的范围,比如date>=2017-08-04 00:00:00:000 and date<=2017-08-04 23:59:59:999。
测试代码如下:
可以发现,毫秒未置零之前根据当前时间获取的calendar实例和字符串转换出的date对象时间戳是不同的。
public static void main(String[] args)
{
//当前时间的Calendar实例
Calendar calendar=Calendar.getInstance();
Date date=new Date();
//将小时置零
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟置零
calendar.set(Calendar.MINUTE,0);
//将秒置零
calendar.set(Calendar.SECOND, 0);
//获取转化为毫秒值
System.out.println(calendar.getTimeInMillis());//1502121600093
//转化为date类型
date=calendar.getTime();
//打印date值的时间戳值
System.out.println(date.getTime());//1502121600093
//格式化
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
4000
System.out.println(sdf1.format(date));//2017-08-08 00:00:00
System.out.println();
String str="2017-08-08 00:00:00";
try
{
//将字符串转化为时间,字符串时间格式一定要和SimpleDateFormat构造的对象格式相同,否则会报错
date=sdf1.parse(str);
System.out.println(date.getTime());//1502121600000
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
calendar.set(Calendar.MILLISECOND,0);
System.out.println(calendar.getTimeInMillis());//1502121600000
}
在生产环境传入时间等参数查询时总是查不到数据,实际上表中是有数据的,将语句加上查询条件捞出来放到数据库是能查出来数据的。
后来才发现是因为代码中传的date类型参数只精确到秒,毫秒级别不是零导致查询匹配不上,所以在用date类型进行比较时一定要记得毫秒位,或者就用时间戳格式进行比较,或者限制一个精确到毫秒的范围,比如date>=2017-08-04 00:00:00:000 and date<=2017-08-04 23:59:59:999。
测试代码如下:
可以发现,毫秒未置零之前根据当前时间获取的calendar实例和字符串转换出的date对象时间戳是不同的。
public static void main(String[] args)
{
//当前时间的Calendar实例
Calendar calendar=Calendar.getInstance();
Date date=new Date();
//将小时置零
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟置零
calendar.set(Calendar.MINUTE,0);
//将秒置零
calendar.set(Calendar.SECOND, 0);
//获取转化为毫秒值
System.out.println(calendar.getTimeInMillis());//1502121600093
//转化为date类型
date=calendar.getTime();
//打印date值的时间戳值
System.out.println(date.getTime());//1502121600093
//格式化
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
4000
System.out.println(sdf1.format(date));//2017-08-08 00:00:00
System.out.println();
String str="2017-08-08 00:00:00";
try
{
//将字符串转化为时间,字符串时间格式一定要和SimpleDateFormat构造的对象格式相同,否则会报错
date=sdf1.parse(str);
System.out.println(date.getTime());//1502121600000
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
calendar.set(Calendar.MILLISECOND,0);
System.out.println(calendar.getTimeInMillis());//1502121600000
}
相关文章推荐
- SQL 按匹配条件的多少查询出匹配度最高的配置数据
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- hibernate条件查询注入自定义Bean无需配置文件,取需要的字段
- 当只有一个输入条件的时匹配数据库表中多个字段模糊查询的SQL语句
- 项目发布到Linux注意事项。Linux系统SQL语句查询的表字段名不能大写。
- 使用Navicat for Mysql执行sql查询文件注意事项
- Java读取配置文件方法及文件路径注意事项
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- hibernate条件查询注入自定义Bean无需配置文件,取需要的字段
- mybatis-generator自动生成java代码和配置文件的注意事项
- Java读取Properties配置文件几点注意事项
- hibernate条件查询注入自定义Bean无需配置文件,取需要的字段
- delphi中多条件SQL语句的增加注意事项
- 在配置文件中获取数据源,然后在hibernate中用sql语句进行查询操作
- 【ZT】SQL实现多字段模糊匹配关键字查询
- 原创:Java基础,参数配置,注意事项! jdk1.5+jsp+mysql+tomcat的配置
- sql 查询条件字段为text或ntext 的解决方案
- 在xaml文件中对Module进行配置的注意事项
- 利用Jakarta Commons Digester匹配xml配置文件信息与其对应的xml规则文件形成Java Object
- WebWork之--使用fileUpload interceptor实现文件上传[基本配置+注意事项]