現時点での問題は、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
これを解決するために何ができるかについて、誰か考えがありますか。
他の人が答えたことに加えて (無効な日付を保存することは良い考えではないという非常に良いアドバイスを含む)、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
構成プロパティの指定方法については、こちらを参照してください。
「0000-00-00」は無効な日付です。データに存在してはなりません。
したがって、次のいずれかを行う必要があります。
データをクリーンアップし、MySQL 構成で allow_invalid_dates をオフにします ( http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_allow_invalid_datesを参照) 。
日付の例外をキャッチして不正なデータを処理する Java コードを作成する
John Woo が提案したように、無効な日付をデフォルトの日付に置き換える SQL を記述します。
3 の問題は、例外をスローする可能性のある他の無効な日付 (例: '2012-02-31') があることです。幸運を。
データベースから行を取得する場合は、select
ステートメントで日付をフォーマットします。
SELECT if(colDate = '0000-00-00', curdate(), colDate), ....
CURDATE()
希望するデフォルトの日付に置き換えるだけです。例外が発生する理由0000-00-00
は、有効な日付ではないためです。