3

この例外が発生します:

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

このコードから発信:

Date internalDate = rs.getDate(idx++);

はどこrsにありますかResultSet

したがって、これは私にとっては問題ありません。データベースにゼロの日付があることを知っています。これらを読み取り、ダウンストリームデータ構造で適切な(おそらくnull)データに変換できる必要があります。問題は、それを取得して「ソフト」エラーを取得する方法がわからないことです。この行をSQL​​Exceptionのtry/catchでラップすることを考えましたが、これによりResultSetの有効性が損なわれることを理解しています。

SQLExceptionをスローせずに、この値を別の方法で読み取ることは可能ですか?

4

5 に答える 5

11

@a_horse_with_no_nameの答えが好きですが、接続を制御できない場合は、null代わりにクエリを変更して次を返すことができます。

select
    ...
    case when my_date_col = '0000-00-00' then null else my_date_col end as my_date_col,
    ...

または、もう少し簡潔ですが、mysqlのみのオプション:

    if(my_date_col = '0000-00-00', null, my_date_col) as my_date_col


また、返される日付に依存するコードを壊す可能性があるため、アプリケーション全体のJDBCの動作を変更する場合は注意が必要です。おそらくrs.getString(i)代わりに使用します。確認するには、他のすべてのクエリを回帰テストする必要があります。

于 2012-11-29T20:08:50.297 に答える
10

それらをNULLに変換するようにJDBCドライバーに指示する必要があります。zeroDateTimeBehaviorこれは、接続プロパティ名に値を渡すことによって行われます。convertToNull

詳細については、マニュアルを参照してください:http: //dev.mysql.com/doc/refman/4.1/en/connector-j-installing-upgrading.html

于 2012-11-29T20:06:11.500 に答える
0

rs.getString()自分で使用して解析することをお勧めしStringます。すべて0の場合は、nullDate参照を使用します。そうでない場合は、適切なDateオブジェクトを作成します。

于 2012-11-29T20:10:17.760 に答える
0

列AllowNullを設定し、列にデフォルト値を設定します:1900-01-01が私の最善の解決策でした...

日付設定

于 2019-03-18T07:13:14.477 に答える
0
  1. 「simpleDateFormat.parse(yourValue)」を使用して、この文字列の結果を日付に変換します
  2. その日付から日または年または月の値を取得します(必要な方)
  3. これはint値を返します
  4. 0かどうかを確認してください
  5. ゼロの場合、日付をnullに設定します。
于 2019-03-18T07:21:20.190 に答える