5

JDBC が MySQL (5.1.51) の有効な日時を java.sql.timestamp に変換しようとすると、java.sql.SQLException がスローされます。例は次のとおりです。

java.sql.SQLException: Cannot convert value '2012-04-05 10:20:00' from column 40 to TIMESTAMP

これは初めて

Versions:
MySQL: 5.1.51
J/Connector: 5.1.19
Column Definition:  DATETIME
Java Type:   java.sql.Timestamp

スタックトレース:

Cannot convert value '2012-04-05 10:20:00' from column 40 to TIMESTAMP.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1335)
    at com.mysql.jdbc.BufferRow.getTimestampFast(BufferRow.java:576)
    at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:6466)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6066)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:6104)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
    at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)

DAO クラスは最近変更されていません。サーバーの最近の変更は、MySQL を 5.1.46 から 5.1.51 にアップグレードしたことだけです。

4

2 に答える 2

6

JDBC 接続 URL に useFastDateParsing=false を追加することで、Fast Date Parsing を無効にすることができます。たとえば、次のようにして問題を解決できます。

jdbc:mysql://yourHostName:3306/yourDbName?useUnicode=true&useFastDateParsing=false&characterEncoding=UTF-8
于 2015-09-24T17:22:52.340 に答える
0

私は提案することができます:

  1. 調べてみて、MySQL にマニュアルを入力しDEBUGてみると、問題がより簡単に見つかります。DAOSql Query
  2. MySQL を 5.1.46 にダウングレードしても、同じ問題が発生しますか? はいの場合、テーブル構造に問題があります。列は誰かによって変更されました。
于 2012-04-23T02:20:43.203 に答える