【发布时间】:2018-10-25 11:31:35
【问题描述】:
我在一个使用 mysql db 的 spring 项目中工作。当应用程序在我的本地运行时,每个插入和更新 sql 命令都在项目的后端运行时,我得到了“日期时间”变量的这些类型异常;
原因:java.sql.BatchUpdateException:数据截断:不正确的日期时间值:第 1 行的列“CREATION_DATE”的“” 在 com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:665) 在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) ... 54 更多
Mysql 版本:5.7.18,mysql-connector-java 版本:-5.1.38,用户时区在 tomcat 7 vm 参数和 db 时区为“-Duser.timezone=Europe/Istanbul”:GMT +3
示例代码块;
ResponseCreateTicket response = new ResponseCreateTicket();
TicketDTO ticket=new TicketDTO();
ticket.setTicketNumber(UUID.randomUUID().toString().toUpperCase(Locale.ENGLISH));
ticket.setStatus(TicketStatus.UNCOMPLETED.toString());
Date date = new Date();
ticket.setCreatedOn(date);
ticket.setReferenceNumber(request.getReferenceNumber());
getTicketDAO().createTicket(ticket);
response.setTicketNumber(ticket.getTicketNumber());
return response;
sql休眠显示和绑定参数;
休眠:插入 eis_ticket (TICKET_NUMBER, STATUS, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, REFERENCE_NUMBER, ID) 值(?, ?, ?, ?, ?, ?, ?, ?) 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [1] 作为 [VARCHAR] - 9BF25A08-C442-45FA-A95F-8E59502CE037 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [2] 作为 [VARCHAR] - 未完成 2018-05-16 10:57:37 TRACE BasicBinder:? - 将参数 [3] 绑定为 [VARCHAR] - 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [4] 作为 [TIMESTAMP] - 2018 年 5 月 16 日星期三 10:57:32 EEST 2018-05-16 10:57:37 TRACE BasicBinder:? - 将参数 [5] 绑定为 [VARCHAR] - 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [6] 作为 [TIMESTAMP] - 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [7] 作为 [VARCHAR] - b4be9b87-21c4-4001-b80d-244420ab2e00 2018-05-16 10:57:37 TRACE BasicBinder:? - 绑定参数 [8] 作为 [BIGINT] - 1925 2018-05-16 10:57:37 错误 JDBCExceptionReporter:? - 数据截断:不正确的日期时间值:第 1 行的列“CREATION_DATE”的“”
日期格式可以更改为“yyyy-MM-dd HH:mm:ss”,但项目中有数百个此类代码,因此不是正确的解决方案。什么可能导致这个问题? Mysql 连接器已更新但无法正常工作。
【问题讨论】:
-
你必须展示一些代码。堆栈跟踪中的日期时间值似乎为空。
-
该错误表示传递给日期时间列的空字符串。您需要传递一个
null值,而不是一个空字符串,但您真的不应该 将字符串传递给日期时间列。使用PreparedStatement和Timestamp。 -
问题已被编辑。