ホームページ >データベース >mysql チュートリアル >JDBC で「0000-00-00 00:00:00」DATETIME 値を処理するにはどうすればよいですか?

JDBC で「0000-00-00 00:00:00」DATETIME 値を処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 15:46:39910ブラウズ

How to Handle

JDBC での "0000-00-00 00:00:00" DATETIME 値の処理

使用して MySQL データベースから DATETIME 値を取得する場合JDBC では、値が準 null に設定されている場合、例外が発生する可能性があります。値は「0000-00-00 00:00:00」です。この問題は、生の文字列を取得することが目的であっても、resultset.getString("add_date") を使用して値を文字列として取得しようとすると発生します。

代替ソリューション

この問題の回避策は、次の SQL クエリを使用することです。

SELECT CAST(add_date AS CHAR) as add_date

このクエリは、 DATETIME 値を CHAR に変換し、文字列として取得されるようにします。ただし、追加の処理要件があるため、最適なソリューションではないと考えられています。

JDBC URL 構成

別のアプローチは、データソースで JDBC URL を直接構成することです。 configuration:

jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull

zeroDateTimeBehavior プロパティを ConvertToNull に設定することで、例外をスローする代わりに、すべてゼロの DATETIME 値を NULL に変換する JDBC ドライバー。

ソースと追加オプション

公式 MySQL マニュアルに、その方法の詳細が記載されています。すべてゼロの DATETIME 値を処理しますConnector/J:

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html#property_zeroDateTimeBehavior

によるとマニュアルによると、Connector/J バージョン 3.0.x では、デフォルトですべてゼロの DATETIME 値が NULL に変換されました。ただし、バージョン 3.1 では、デフォルトの動作が例外をスローするように変更されました。 zeroDateTimeBehavior プロパティを使用すると、次のオプションのいずれかを指定してこの動作をカスタマイズできます。

  • 例外 (デフォルト): SQLState S1009 で例外をスローします。
  • convertToNull: 値を次のように変換します。 NULL.
  • round: 日付を最も近い値に丸めます。 0001-01-01.

以上がJDBC で「0000-00-00 00:00:00」DATETIME 値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。