0

現時点での問題は、mysql データベースから日付オブジェクトを取得できないことです。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

また

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date

これを解決するために何ができるかについて、誰か考えがありますか。

これこれを試しましたが、日付が原因で同じ2つのエラーが発生します

4

3 に答える 3

2

他の人が答えたことに加えて (無効な日付を保存することは良い考えではないという非常に良いアドバイスを含む)、JDBC ドライバーにそれらの無効な日付を別の方法で処理するように指示することもできます。

から: http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

Connector/J 3.1 は、これらの値が検出されるとデフォルトで例外をスローします。これは、JDBC および SQL 標準によると、これが最も正しい動作であるためです。この動作は、zeroDateTimeBehavior 構成プロパティを使用して変更できます。許容される値は次のとおりです。

-  例外(デフォルト)。これは、SQLState が S1009 の SQLException をスローします。
-   convertToNull、日付の代わりに NULL を返します。
-   round : 日付を最も近い値 (0001-01-01) に丸めます。

使用することをお勧めしますconvertToNull

構成プロパティの指定方法については、こちらを参照してください。

于 2012-09-26T18:27:02.423 に答える
1

「0000-00-00」は無効な日付です。データに存在してはなりません。

したがって、次のいずれかを行う必要があります。

  1. データをクリーンアップし、MySQL 構成で allow_invalid_dates をオフにします ( http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_allow_invalid_datesを参照) 。

  2. 日付の例外をキャッチして不正なデータを処理する Java コードを作成する

  3. John Woo が提案したように、無効な日付をデフォルトの日付に置き換える SQL を記述します。

3 の問題は、例外をスローする可能性のある他の無効な日付 (例: '2012-02-31') があることです。幸運を。

于 2012-09-26T17:57:06.647 に答える
0

データベースから行を取得する場合は、selectステートメントで日付をフォーマットします。

SELECT if(colDate = '0000-00-00', curdate(), colDate), ....

CURDATE()希望するデフォルトの日付に置き換えるだけです。例外が発生する理由0000-00-00は、有効な日付ではないためです。

于 2012-09-26T17:04:48.093 に答える