17.8.3 SQLException拡張機能
エラーが発生した場合,JDBC2.0ではSQLExceptionが投入されましたが,JDBC4.0ではJDBC4.0で追加されたSQLExceptionの下位分類の例外クラスが投入されます。ただし,HiRDBサーバで詳細なSQLSTATEが設定されていない場合は,JDBCドライバ内で検知できるエラーを除き,JDBC2.0と同様にSQLExceptionが投入されます。
(1) サポートクラス一覧
JDBC4.0で返却される例外クラスの一覧と各クラスの説明を次の表に示します。
クラス名 |
内容 |
エラー後の接続 |
---|---|---|
一時的ではないエラーを示します。失敗したSQLを再試行しても正常に実行できない場合に投入されます。 |
有効 |
|
SQLSTATEのクラス値が0A(サポートされていない機能)の場合に投入されます。 |
||
SQLSTATEのクラス値が08(コネクション違反)の場合に投入されます。 |
無効(接続時のエラー) |
|
SQLSTATEのクラス値が22(データ例外)の場合に投入されます。 |
有効 |
|
SQLSTATEのクラス値が23(整合性制約違反)の場合に投入されます。 |
||
SQLSTATEのクラス値が28(認可識別子の指定が正しくない)の場合に投入されます。 |
無効(接続時のエラー) |
|
SQLSTATEのクラス値が42(構文誤り又はアクセス規則違反)の場合に投入されます。 |
有効 |
|
一時的なエラーを示します。失敗したSQLを再試行すれば成功する可能性がある場合に投入されます。 |
||
SQLSTATEのクラス値が08(コネクション違反)の場合に投入されます(HiRDBが開始又は終了中である場合など)。 |
無効(接続時のエラー) |
|
SQLSTATEのクラス値が40(トランザクションがロールバックした)の場合に投入されます。 |
有効 |
|
タイムアウトが発生した場合に投入されます。 |
||
接続を再確保した上で,失敗したトランザクションを再試行すれば成功する可能性がある場合に投入されます。 |
無効 |
|
設定できないクライアントのプロパティが一つ以上ある場合に,Connection.setClientInfoメソッドによって投入されます。 |
− |
- (凡例)
-
−:該当しません(接続状態は関係しません)。
JDBC4.0で追加された例外クラスの継承関係を次に示します。
java.sql.SQLException │ ├ java.sql.SQLNonTransientException │ ├ java.sql.SQLFeatureNotSupportedException │ ├ java.sql.SQLNonTransientConnectionException │ ├ java.sql.SQLDataException │ ├ java.sql.SQLIntegrityConstraintViolationException │ ├ java.sql.SQLInvalidAuthorizationException │ ├ java.sql.SQLSyntaxErrorException │ ├ java.sql.SQLTransientException │ ├ java.sql.SQLTransientConnectionException │ ├ java.sql.SQLTransactionRollbackException │ ├ java.sql.SQLTimeoutException │ ├ java.sql.SQLRecoverableException └ java.sql.SQLClientInfoException
(2) 例外クラス投入の条件
Type4 JDBCドライバがサポートする例外クラスは,詳細なSQLSTATEの設定有無によって投入の有無が異なります。詳細なSQLSTATEの設定と例外クラス投入の有無を次の表に示します。
JDBC規格 |
クラス名 |
詳細なSQLSTATE |
|
---|---|---|---|
設定あり |
設定なし |
||
1.0 |
SQLException |
× |
○ |
2.0 |
BatchUpdateException |
○ |
○ |
XAException |
○ |
○ |
|
4.0 |
SQLNonTransientException |
○ |
○※ |
SQLFeatureNotSupportedException |
○ |
○※ |
|
SQLNonTransientConnectionException |
○ |
× |
|
SQLDataException |
○ |
○※ |
|
SQLIntegrityConstraintViolationException |
○ |
× |
|
SQLInvalidAuthorizationException |
○ |
× |
|
SQLSyntaxErrorException |
○ |
○※ |
|
SQLTransientException |
○ |
× |
|
SQLTransientConnectionException |
○ |
○※ |
|
SQLTransactionRollbackException |
○ |
○ |
|
SQLTimeoutException |
○ |
× |
|
SQLRecoverableException |
○ |
○ |
|
SQLClientInfoException |
○ |
○ |
- (凡例)
-
○:投入されます。
×:投入されません。
- 注※
-
JDBCドライバ内で検知できるエラーだけ投入されます。
SQLSTATEの値を詳細に出力するかどうかの設定については,「PDSTANDARDSQLSTATE」を参照してください。
(3) メソッド詳細
例外クラスが提供する各メソッドの詳細及び使用方法については,JDBCの関連ドキュメントを参照してください。なお,各例外クラスはjava.sqlパッケージのクラスを直接利用するため,独自の仕様はありません。
(4) HiRDBのエラーと各例外クラスの対応
HiRDBのエラー(JDBCドライバ内のエラーを含む)と各例外クラスの対応については,マニュアル「HiRDB Version 9 メッセージ」の「SQLSTATE」を参照してください。
(5) 注意事項
executeQuery()などのSQL実行メソッドで,setQueryTimeout()又はPDCWAITTIMEで設定した時間でタイムアウトした場合,JDBC規格ではSQLTimeoutExceptionが投入されます。しかし,Type4 JDBCドライバでは,タイムアウト時にHiRDBサーバと必ず切断されるため,SQLRecoverableExceptionが投入されます。