实验过程中遇到的mysql DateTime类型与java Calendar问题与解决过程记录

来源:互联网 发布:淘宝网页点击没反应 编辑:程序博客网 时间:2024/04/30 22:10

 首先,先声明一下我做的事情及其环境。

 我做的事情很简单,就是将获取到的数据通过hibernate同的query接口,存入到数据库以及根据时间删除数据库中的数据。数据库表设计时,凡是涉及到时间的字段,字段类型一律设为dataTime。在写删除语句时,where中的时间类型设为java.util.date。而这个date的获得,是通过Calendar的 getTime()方法获得。

  首先,是往数据库中插入数据。对dateTime类型的时间字段,hiberntae对应的属性类型是java.util.date,也是通过Calendar的getTime()方法获得的。插入数据库一切正常,通过Navicat查看时,显示的时间格式是yyyy-MM-dd HH:mm:ss。通过查资料发现,mysql的dataTime对事件的处理,包括存储于查询,都是用这种格式的。

  但是在查询数据的时候就发现问题了,通过hql语句始终查询不出来东西,试了各种方法,包括将where中的的字段类型设为java.sql.date等等,都不行。于是从数据库中将数据读出在控制台展示,发现竟然是yyyy-MM-dd HH:mm:ss.0的格式。这让人很郁闷。再查Calendar的getTime()方法,发现它是精确到毫秒的。但是还是不明白,我插入和查询都是同一个工具类来提供时间数据,为嘛就查不出来呢?难道这涉及到hibernate的后台处理逻辑?


 后来发现,其实数据库中time的时间类型dataTime和hibernate中的时间的类型是不关联的。将hibnernate中的对应属性类型改为String,照样可以插入,在hql语句中用string类型查询可以满足要求。