1. ホーム
  2. java

[解決済み] JDBCでのDATETIME値 0000-00-00 00:00:00の取り扱いについて

2023-05-03 22:16:58

質問

を実行しようとすると、例外が発生します。

resultset.getString("add_date");

オブジェクトとしてではなく、文字列として値を取得しようとしているにもかかわらず、DATETIME 値 0000-00-00 00:00:00 (DATETIME の準 null 値) を含む MySQL データベースへの JDBC 接続のために、DATETIME 値を取得する必要があります。

私はこれを回避するために

SELECT CAST(add_date AS CHAR) as add_date

というのはうまくいくのですが、バカみたいです...もっといい方法はないのでしょうか?

私が言いたいのは、私は生のDATETIME文字列が欲しいだけなので、自分でパースできます。 をそのまま .

のノートです。 ここで、「0000」が登場します。 http://dev.mysql.com/doc/refman/5.0/en/datetime.html )

不正なDATETIME、DATE、またはTIMESTAMP の値は、適切な型の "ゼロ "に変換されます。 に変換されます。 ('0000-00-00 00:00:00'または '0000-00-00').

具体的な例外はこれです。

SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP.
SQLState: S1009
VendorError: 0
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 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.ResultSetImpl.getTimestampFromString(ResultSetImpl.java:6343)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5670)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5491)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5531)

どのように解決するのですか?

私は同じ問題を解決しようとして、これに出くわしました。 私が作業しているインストールは JBOSS と Hibernate を使用しているので、私はこれを別の方法で行う必要がありました。 基本的なケースについては、以下のように zeroDateTimeBehavior=convertToNull を接続 URI に追加します。 設定プロパティページ .

私は、hibernate の設定にそのパラメーターを置くことに言及する他の提案を、各地で見つけました。

hibernate.cfg.xml にあります。 :

<property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property>

hibernate.properties :

hibernate.connection.zeroDateTimeBehavior=convertToNull

しかし、私はそれを自分の mysql-ds.xml として JBOSS 用のファイルを作成しました。

<connection-property name="zeroDateTimeBehavior">convertToNull</connection-property>

これが誰かの助けになることを願っています :)