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 よりさらに詳しい情報を
取得できます。
- SQLNonTransientException
SQLNonTransientException は、
以前に失敗した SQL 操作を再試行しても正常に実行できない場合に、何らかの修正処置をとらない限り
スローされます。
SQLNonTransientException クラスには
以下のサブクラスがあります。
- SQLFeatureNotSupportedException
- SQLNonTransientConnectionException
- SQLDataException
- SQLIntegrityConstraintViolationException
- SQLInvalidAuthorizationSpecException
- SQLSyntaxException
- SQLTransientException
SQLTransientException は、
以前に失敗した SQL 操作を再試行すれば成功する可能性がある場合に、アプリケーションからの介入を
受けることなくスローされます。
SQLTransientException が
スローされたあとでも接続は引き続き有効です。 SQLTransientException クラスには以下のサブクラスがあります。
- SQLTransientConnectionException
- SQLTransientRollbackException
- SQLTimeoutException
- SQLRecoverableException
SQLRecoverableException が
スローされるのは、以前に失敗した操作が、アプリケーションがリカバリー・ステップを実行してトランザクションを
再試行すれば成功する可能性がある場合です。
SQLRecoverableException がスローされると、
接続は無効になります。
- SQLClientInfoException
SQLClientInfoException は、
設定できないクライアント・プロパティーが 1 つ以上ある場合に Connection.setClientInfo メソッドによって
スローされます。 SQLClientInfoException は、設定できないプロパティーを
示します。
BatchUpdateException
BatchUpdateException オブジェクトには、SQL ステートメントの
バッチの実行中に発生するエラーに関する以下の項目が含まれています。
- エラーについての記述を含む String オブジェクト、
または NULL
- 失敗した SQL ステートメントの SQLSTATE を含む String オブジェクト、
または NULL
- エラー・コードを含む整数値、またはゼロ
- バッチ内の SQL ステートメントの更新カウントの整数配列、または null
- SQLException オブジェクトへのポインター、または NULL
バッチ全体に対して、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 SQLJ は SQLWarning を生成しません。
汎用の SQLWarning オブジェクトには、以下の情報が含まれています。
- 警告についての記述を含む String オブジェクト、または NULL
- SQLSTATE を含む String オブジェクト、または NULL
- エラー・コードを含む int 値
- 次の SQLWarning へのポインター、または NULL
IBM Data Server
Driver for JDBC and SQLJ の下では
、SQLException オブジェクトと同様に、SQLWarning オブジェクトにも DB2® 固有の情報を含めることができます。 SQLWarning オブジェクトの DB2 固有の情報は、SQLException オブジェクトの DB2 固有の情報と同じです。