1.根据时间查询数据问题
测试环境使用mybatis根据时间查询数据,报出奇葩错误,说查询出的结果处理的时候无法处理72:00:11
,但是换个时间查询又正常了.这个 时间在数据库里我看了下根本没有啊,怎么会有这样的结果?
### Cause: java.sql.SQLException: Illegal hour value '72' for java.sql.Time type in value '72:00:11.
; SQL []; Illegal hour value '72' for java.sql.Time type in value '72:00:11.; nested exception is java.sql.SQLException: Illegal hour value '72' for java.sql.Time type in value '72:00:11.
at ........
at ......
at.........org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:414)
at com.jpgk.base.dao.DefaultBaseDao.selectList(DefaultBaseDao.java:141)
at com.jpgk.base.service.DefaultBaseService.selectList(DefaultBaseService.java:474)
..............
at com.jpgk.taolin.service.impl.TaolinDeviceOpenRecordService$$EnhancerBySpringCGLIB$$a0d73044.selectListPage(<generated>)
at com.jpgk.taolin.controllers.TaolinDeviceOpenRecordController.list(TaolinDeviceOpenRecordController.java:52)
... 49 more
Caused by: java.sql.SQLException: Illegal hour value '72' for java.sql.Time type in value '72:00:11.
......
... 67 more
2.解决步骤
1.首先我到数据库看有没有这条数据,发现没有这条数据
2.第二步我根据查询的sql在数据库运行下,发现这个sql也是正常的,说明在查询的时候是没有问题,问题应该处在查询结果的处理上.
3.查询结果的处理框架有处理,我们自己也有处理,既然是根据时间查询,特定时间查询出来的结果处理有问题,那就着重看下那个时间的数据.
4.通过看这个特定时间段的数据,发现数据有问题,因为是测试环境,有条记录开始时间和结束时间被颠倒了,测试环境的数据经常被修改,所以出现了该问题
,修改过来之后再次查询发现没有问题.再次看代码发现代码中对这个时间有做处理.
3.解决后问题深入
数据修改过来之后该问题没有,但是在测试过程中发现该问题重复出现,虽然经常改测试数据时间,但是这个问题老出现觉得还是有问题,应该是哪个sql用法还是有问题.总不能每次都这么改来改去.所以要详细看下sql了
SELECT
...
TIMEDIFF(start_time,end_time) times,
...
FROM
发现里边用到了TIMEDIFF来计算两次时间的差值,经查询
TIMEDIFF返回两个TIME或DATETIME值之间的差值。