Data truncation: Incorrect datetime value: '' for column 'ordertime' at row 1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SweetyoYY/article/details/79124132

* 背景


       最直观遇到的问题是这样的:1. could not insert: [cn.itcast.shop.order.vo.Order]; SQL [insert into orders (total, ordertime, state, name, addr, phone, uid) values (?, ?, ?, ?, ?, ?, ?)]; nested exception is org.hibernate.exception.DataException: could not insert: [cn.itcast.shop.order.vo.Order]
   当时也做了问题记录,如下:

这里写图片描述


* 调试


       遇到问题,首先要做的就是调试,看看是哪里出现了问题,这样更容易下手解决。不过问题调试后我发现,最后出现意外的是持久层,使用hibernate的时候,这时感觉到不是code的问题了,于是继续追踪,看到了抛出的t提示信息是这样的:Data truncation: Incorrect datetime value: ” for column ‘ordertime’ at row 1。我想到,当自己执行插入方法时,传过一个date类型的属性。难道是这里出现了问题吗?
   于是,我上网查询了一下,发现mysql-connector-java的jar包和数据库是要匹配的,他们的大致匹配规则是这样的:

  1. Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
  2. Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
  3. Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
  4. Connector/J 3.0 支持MySQL 3.x or MySQL 4.1

* 版本查看


** 数据库版本


       因为自己使用的mysql数据库时装在虚拟机中的docker容器中的,那么docker容器中的mysql如何查看呢?看到的小伙伴有福利了~

  • 查看运行的容器
    通过命令:docker ps 查看正在运行的容器

    这里写图片描述

  • 进入容器

docker exec -it shop bash
mysql -uroot -p

    输入mysql数据库的用户名和密码,即可进入mysql,并且我们也可以看到myslq的版本了,为5.7.18,mysql的版本从5.5以上,日期的格式就发生了变化。

这里写图片描述


** 连接器version


       发现自己使用的jar包时5.0.4版本的,于是自己下了5.1.45version的jar包。这是链接
需要的小伙伴,请自行进入。


** jar包替换


       我们找到自己之前用的jar包,将它替换成我们新的jar包就可以了。不过到这里,小编还是遇到问题,仍然不行,错误依旧。这里要温馨提示大家,我们不仅要将项目下面的lib文件夹中的war包替换一下,同时我们需要将out文件下的jar包替换成新的jar包,不然tomcat依然会发布旧的war包。


* “知识点”


       项目中的Date类型,在mysql中应该配置的类型是datetime类型的。不过为啥低版本的连接器就不可以了呢?这其中又有什么变化呢?期待我们更多的发现~

猜你喜欢

转载自blog.csdn.net/SweetyoYY/article/details/79124132