java.sql.SQLException:无法将值"2020-08-16 17:33:21.690"从第 18 列转换为时间戳



我得到以下异常。但是很少有行能够从结果集中获取值,并且能够映射到javapojo。有人能帮我调试一下这些东西吗?

java.sql.SQLException: Cannot convert value '2020-08-16 17:33:21.690' from column 18 to TIMESTAMP.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1336)
at com.mysql.jdbc.BufferRow.getTimestampFast(BufferRow.java:575)
at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:6686)
at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6005)
at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4961)
at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:5011)
at com.freeware.gridtag.DBGrid.getColumnValue(DBGrid.java:712)
at com.freeware.gridtag.DBGrid.drawGridWithOutColumns(DBGrid.java:2550)
at com.freeware.gridtag.DBGrid.doEndTag(DBGrid.java:600)
at org.apache.jsp.mainReport_jsp._jspService(mainReport_jsp.java:725)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

Caused by: java.lang.NumberFormatException: 0000_15975991715696�8SMPPMTTX2020-08-16 17:33:21.647
TRAFFIC-SPLIT2020-08-16 19:13:21.690Venu-Traffic-Split-On-net2020-08-16 17:52:41.877311110
HANDSET_ACK2020-08-16 17:33:21.6902020-08-16 17:33:21.6902020-08-16 17:52:40.000lid:1915976003605490 sub:001 dlvrd:001 submit date:2008161752 done date:2008161752 stat:DELIVRD err:000 text:3310
at com.mysql.jdbc.StringUtils.getInt(StringUtils.java:756)
at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1114)
... 54 more

感谢您的帮助!

除了MySQL 5.6.4之前,它是在没有微秒的情况下存储的。

我相信刘国顺的最新例子是:

mysqld是5.5。我不知道gh-ost是什么版本。mysqld的设置为time_zone='+08:00'和sql_mode=''。允许零日期。gh-ost在主主机上运行,连接到主mysqld。示例表的时间戳字段create_time默认为0/'0000-00-00…'。由于默认设置且没有ON UPDATE,因此在行更新时不会自动修改此值。示例表只有一行,create_time="0000-00-00 00:00:00"。mysqlslap正在用updatetest11更新这一行,setcounter=counter+1,其中id=1,所以create_time没有被显式更新。gh-ost正在向表中添加一个新列,没有指定对create_time:add列名varchar(1(的更改(假设(gh ost在解析master的二进制日志时,看到UPDATE的行事件,并在将更新应用于新的_test11_gho表时,将after image create_time"0000-00-00 00:00:00"(但它在5.5行事件中表示,我不知道,0?(转换为"1970-01-01 08:00:00+0800 CST"。

在这个例子中,create_time应该在没有修改的情况下从test11复制到_test11_gho。但事实确实如此。我希望这足够让@shlomi-noach知道接下来该向@liuguoshun要求什么。

这是mysql连接器中的一个错误,位于com.mysql.jdbc.ResultSetRow.getTimestampFast。

尝试使用更高版本,或添加";useFastDateParsing=false";到JDBC连接。

最新更新