DB2 Version 9.7 for Linux, UNIX, and Windows

IBM Data Server Driver for JDBC and SQLJ での例外と警告

JDBC アプリケーションでは、SQL エラーによって例外がスローされ、ユーザーは try/catch ブロックを使用してこの例外を処理します。 SQL 警告では例外はスローされないので、 SQL ステートメントの実行後に警告が発生したかどうかを確認するためのメソッドを呼び出す必要があります。

IBM® Data Server Driver for JDBC and SQLJ では 次のようなクラスおよびインターフェースが提供され、これによってエラーや警告の情報が 得られます。

SQLException

エラー処理のための SQLException クラス。 すべての JDBC メソッドは、実行中にエラーが発生すると SQLException のインスタンスを スローします。 JDBC 仕様に従って、 SQLException オブジェクトには以下の情報が含まれます。
  • エラー・コードを含む int 値。 SQLException.getErrorCode はこの値を取得します。
  • SQLSTATE を含む String オブジェクト、または NULL。 SQLException.getSQLState はこの値を取得します。
  • エラーについての記述を含む String オブジェクト、または NULL。 SQLException.getMessage はこの値を取得します。
  • 次の SQLException へのポインター、または NULL。 SQLException.getNextException はこの値を取得します。

JDBC メソッドがスローする SQLException が 1 つだけの場合、その SQLException は、 IBM Data Server Driver for JDBC and SQLJ がメソッドを処理したときに 発生した基本の Java™ 例外によって引き起こされた可能性があります。 この場合は SQLException がこの基礎となる例外をラップするので 、SQLException.getCause メソッドによって エラーに関する情報を取り出すことができます。

DB2Diagnosable

IBM Data Server Driver for JDBC and SQLJ 専用の インターフェース com.ibm.db2.jcc.DB2Diagnosable は、SQLException クラスを拡張します。 DB2Diagnosable インターフェースにより、データ・ソースへのアクセス時に発生する エラーについてより多くの情報が得られます。 JDBC ドライバーがエラーを検出した場合は 、DB2Diagnosable によって得られる情報は、標準の SQLException クラスによる情報と 同じです。 しかしデータベース・サーバーが エラーを検出したときには、DB2Diagnosable は以下のメソッドを追加して、 エラーに関する追加情報を提供します。
getSqlca
以下の情報を含む DB2Sqlca オブジェクトを返します。
  • SQL エラー・コード
  • SQLERRMC 値
  • SQLERRP 値
  • SQLERRD 値
  • SQLWARN 値
  • SQLSTATE
getThrowable
SQLException の原因となった java.lang.Throwable オブジェクトを返します。 そういうオブジェクトが存在しない場合は NULL を返します。
printTrace
診断情報を印刷します。

SQLException サブクラス

JDBC 4.0 以降では、 以下の例外クラスをキャッチすることで、SQLException よりさらに詳しい情報を 取得できます。

BatchUpdateException

BatchUpdateException オブジェクトには、SQL ステートメントの バッチの実行中に発生するエラーに関する以下の項目が含まれています。

バッチ全体に対して、1 つの BatchUpdateException がスローされます。 少なくとも 1 つの SQLException オブジェクトが、BatchUpdateException オブジェクトにチェーニングされます。 SQLException オブジェクトは、それに対応するステートメントがバッチに追加される順序と 同じ順序でチェーニングされます。 SQLException オブジェクトをバッチ内のステートメントに マッチングできるように、個々の SQLException オブジェクトのエラー記述フィールドは 次のストリングで始まっています。
Error for batch element #n:
n は バッチ内のステートメントの番号です。

バッチ実行中の SQL 警告は BatchUpdateException をスローしません。 警告に関する情報を取得するには、executeBatch メソッドを実行したオブジェクトに対して Statement.getWarnings メソッドを使用します。 これで、各 SQLWarning オブジェクトのエラーに関する記述、SQLSTATE、およびエラー・コードを取得できます。

SQLWarning

SQL ステートメントが正の数の SQLCODE を戻す場合、および SQL ステートメントがゼロ以外の SQLSTATE を持つ 0 の SQLCODE を戻す場合、IBM Data Server Driver for JDBC and SQLJ は警告を累積します。

getWarnings を呼び出すことによって、SQLWarning オブジェクトを取得できます。

重要: Statement.executeUpdate または PreparedStatement.executeUpdate への呼び出しがどの行にも影響を与えない場合、IBM Data Server Driver for JDBC and SQLJ はエラー・コード +100 の SQLWarning を生成します。

ResultSet.next への呼び出しで行が戻されない場合、IBM Data Server Driver for JDBC and SQLJSQLWarning を生成しません。

汎用の SQLWarning オブジェクトには、以下の情報が含まれています。

IBM Data Server Driver for JDBC and SQLJ の下では 、SQLException オブジェクトと同様に、SQLWarning オブジェクトにも DB2® 固有の情報を含めることができます。 SQLWarning オブジェクトの DB2 固有の情報は、SQLException オブジェクトの DB2 固有の情報と同じです。