Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


17.8.3 SQLException拡張機能

エラーが発生した場合,JDBC2.0ではSQLExceptionが投入されましたが,JDBC4.0ではJDBC4.0で追加されたSQLExceptionの下位分類の例外クラスが投入されます。ただし,HiRDBサーバで詳細なSQLSTATEが設定されていない場合は,JDBCドライバ内で検知できるエラーを除き,JDBC2.0と同様にSQLExceptionが投入されます。

〈この項の構成〉

(1) サポートクラス一覧

JDBC4.0で返却される例外クラスの一覧と各クラスの説明を次の表に示します。

表17‒95  JDBC4.0で追加された例外クラス一覧

クラス名

内容

エラー後の接続

SQLNonTransientException

一時的ではないエラーを示します。失敗したSQLを再試行しても正常に実行できない場合に投入されます。

有効

SQLFeatureNotSupportedException

SQLSTATEのクラス値が0A(サポートされていない機能)の場合に投入されます。

SQLNonTransientConnectionException

SQLSTATEのクラス値が08(コネクション違反)の場合に投入されます。

無効(接続時のエラー)

SQLDataException

SQLSTATEのクラス値が22(データ例外)の場合に投入されます。

有効

SQLIntegrityConstraintViolationException

SQLSTATEのクラス値が23(整合性制約違反)の場合に投入されます。

SQLInvalidAuthorizationException

SQLSTATEのクラス値が28(認可識別子の指定が正しくない)の場合に投入されます。

無効(接続時のエラー)

SQLSyntaxErrorException

SQLSTATEのクラス値が42(構文誤り又はアクセス規則違反)の場合に投入されます。

有効

SQLTransientException

一時的なエラーを示します。失敗したSQLを再試行すれば成功する可能性がある場合に投入されます。

SQLTransientConnectionException

SQLSTATEのクラス値が08(コネクション違反)の場合に投入されます(HiRDBが開始又は終了中である場合など)。

無効(接続時のエラー)

SQLTransactionRollbackException

SQLSTATEのクラス値が40(トランザクションがロールバックした)の場合に投入されます。

有効

SQLTimeoutException

タイムアウトが発生した場合に投入されます。

SQLRecoverableException

接続を再確保した上で,失敗したトランザクションを再試行すれば成功する可能性がある場合に投入されます。

無効

SQLClientInfoException

設定できないクライアントのプロパティが一つ以上ある場合に,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の設定と例外クラス投入の有無を次の表に示します。

表17‒96 詳細な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 メッセージ」の「SQLSTATE」を参照してください。

(5) 注意事項

executeQuery()などのSQL実行メソッドで,setQueryTimeout()又はPDCWAITTIMEで設定した時間でタイムアウトした場合,JDBC規格ではSQLTimeoutExceptionが投入されます。しかし,Type4 JDBCドライバでは,タイムアウト時にHiRDBサーバと必ず切断されるため,SQLRecoverableExceptionが投入されます。