今天部署服务器项目运行,当遇见有时间数据对象的插入和更新操作的时候,就报错,如下:
[html] view plain copy print?
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1160) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:685) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1400) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1314) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1299) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) ... 109 more
因为在测试服务器上该项目是正常的,所以比较纳闷,项目是一样的都是
hibernate3.6,那就是JDK版本,MySQL版本,还有Tomcat版本不一样导致。最终排除其它,锁定在MySQL版本问题上,我在测试上
用的是5.1版本,服务器上使用的是最新的5.6版本;看到网上说5.6对时间类型做了调整,于是果断换成5.5的Mysql64位。测试,通过,正常。
所以,遇见该问题解决方法,目前是换数据库版本,因为是5.6版本比较新,我在网上还没有找到什么解决方案,如果哪位高手有更好的解决方案,请下面留言,大家一起学习,共同进步。
---------------------------------------------
事隔多日,回看这个问题,自己又在工作中遇见该问题,所以将此问题按照楼下大侠的指导修改了一下,验证,该解决方案正确。
解决方法如下:
找到你项目中的mysql-connector-java的架包
将此更新到最新版本,我目前项目使用的环境是:java7,
使用的jar包是:mysql-connector-java-5.1.31.jar
经过我的测试没有问题。
如果你的环境是java6,这个jar也是可以的。
完成
如果帮到了你,请下面留下脚印,以作鼓励。