2013-06-29 10 views

答えて

12

方法getCause()は、その具体的な原因の原因を示します(SQLException)。一方、処理中には、複数の例外が発生する可能性があります。バッチ処理、複数のクエリパラメータのサーバサイドエラー(長すぎる、変換エラーなど)が考えられます。

これらの複数の例外は同じレベルにあります(互いに重複しないため)SQLExceptionのチェーンに追加されます。このチェーンの先頭はスローされる例外です。チェーン内の他のSQLExceptionに移動するには、getNextException()を使用します。一方、例えば

try { 
    // Something that produces multiple SQLExceptions 
} catch (SQLException e) { 
    SQLException current = e; 
    do { 
     // do something with current 
    } while ((current = current.getNextException()) != null) 
} 

SQLExceptionはまた、(/ JDBC4のJava 6で導入された)方法public Iterator<Throwable> iterator()、この各SQLExceptionを反復し、チェーン内の次のSQLExceptionに進む前にその原因を有しています。

5

SQL操作は、いくつかの独立した理由で失敗する可能性があります。たとえば、複数の行を更新しようとする可能性があり、3つの行が存在しない可能性があります。これらの3つの失敗は独立しています。ここではgetNextException()が適切です。例外を構築するときは、setNextException()を使用できます。データベースに話したときに一方

は、IOExceptionがあったので、全体の操作がを失敗した場合、それは根本的な原因だ - IOExceptionが発生したため、SQLExceptionが発生した唯一の理由でした。それはgetCause()が適切な場所です - SQLExceptionを作成するときに、コンストラクタの原因を渡します。

5

特に、バッチステートメントの場合、SQLステートメントの実行によって多くのSQLExceptionが生成されることがあります。 1つのバッチに10行を挿入し、2つが失敗したとします。バッチが失敗したことを示す例外が1つあり、getNextExceptionメソッドを使用して詳細にアクセスする必要があります。これはデータベースドライバに依存するかもしれません。

IOの例外またはSQLExceptionによって引き起こされたアプリケーション固有の例外をスローするなど、ある例外を別のものにラップするときに、例外の原因が使用されます。