本文主要是介绍Data truncation: Incorrect datetime value: '' for column 'ordertime' at row 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 背景
- 调试
- 版本查看
- 数据库版本
- 连接器version
- jar包替换
- 知识点
* 背景 |
最直观遇到的问题是这样的: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包和数据库是要匹配的,他们的大致匹配规则是这样的:
- Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
- Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
- Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
- 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类型的。不过为啥低版本的连接器就不可以了呢?这其中又有什么变化呢?期待我们更多的发现~
这篇关于Data truncation: Incorrect datetime value: '' for column 'ordertime' at row 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!