Hitachi

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


17.8.1 JDBC4.0 APIでの追加機能

JDBC4.0 APIで追加された機能のうち,サポートする機能とドライバを次の表に示します。

表17‒88 JDBC4.0での追加機能とサポートするドライバ

機能

サポートするドライバ

JDBC2.0

JDBC4.0

java.sql.Driver自動ローディング

×

BLOB機能拡張

×

ラッパーパターン

×

接続管理

×

SQLException拡張

×

スカラ関数追加

StatementEventListener

×

(凡例)

○:サポートされます。

×:サポートされません。

〈この項の構成〉

(1) java.sql.Driver自動ローディング

JDBC4.0より前の規格では,Java仮想マシンへのDriverクラスの登録が必要でした。JDBC4.0以降は,Driverクラスの登録が不要になります。Driverクラスの登録については,「Driverクラスの登録」を参照してください。なお,JDBC4.0以降でDriverクラスを登録しても,動作に影響はありません。

(2) BLOB機能拡張

JDBC4.0では,BLOBに関するメソッドが複数追加されました。このうち,Blobインタフェースのfree()メソッドをサポートします。free()メソッドについては,「free()」を参照してください。

(3) ラッパーパターン

Connection,DatabaseMetaData,DataSource,ResultSet,ResultSetMetaData,Statement,PreparedStatement,及びCallableStatementの各インタフェースがWrapperインタフェースを継承します。Wrapperインタフェースについては「Wrapperインタフェース」を参照してください。

(4) 接続管理

JDBC4.0では,コネクションの状態を確認するためのメソッド,及びコネクションプーリングを制御するためのメソッドが追加されています。このうち,コネクションの状態を確認するメソッド(ConnectionインタフェースのisValid(int timeout)メソッド)をサポートします。isValid(int timeout)メソッドについては「isValid(int timeout)」を参照してください。

(5) SQLException拡張

JDBC4.0では,SQLExceptionのサブクラスとして複数の例外クラスが追加されています。追加された例外クラスと,サポートの可否を次の表に示します。ただし,これらの例外クラスは,HiRDBサーバで詳細なSQLSTATEが設定されている場合にだけ返却されます。SQLSTATEが詳細に設定されていない場合は,JDBCドライバ内で検知するエラーを除き,JDBC2.0と同様にSQLExceptionが返却されます。

表17‒89 追加された例外クラスと,サポートの可否

クラス名

サポート可否

SQLNonTransientException

SQLFeatureNotSupportedException

SQLNonTransientConnectionException

SQLDataException

SQLIntegrityConstraintViolationException

SQLInvalidAuthorizationException

SQLSyntaxErrorException

SQLTransientException

SQLTransientConnectionException

SQLTransactionRollbackException

SQLTimeoutException

SQLRecoverableException

SQLClientInfoException

(凡例)

○:サポートします。

詳細は,「SQLException拡張機能」を参照してください。

(6) スカラ関数追加

JDBC4.0では,スカラ関数が複数追加されました。追加されたスカラ関数と,サポートの可否を次の表に示します。

表17‒90 追加されたスカラ関数と,サポートの可否

スカラ関数

サポート可否

CHARA_LENGTH,

CHARACTER_LENGTH

×

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

EXTRACT

×

OCTET_LENGTH

×

POSITION

(凡例)

○:サポートします。

×:サポートしません。

(7) StatementEventListener

StatementEventListenerはStatementプールを管理する外部プログラムが使用する機能です。Statementプール機能を実装しているアプリケーションサーバ向けに提供します。

アプリケーションサーバは,PreparedStatementが無効となった場合にJDBCドライバから通知を受けるため,該当インタフェースを実装してJDBCドライバに登録します。PreparedStatementが無効となると,該当インタフェースを通してJDBCドライバからアプリケーションサーバへ通知を行い,アプリケーションサーバは無効となったPreparedStatementをStatementプールから削除します。

なお,上記のPreparedStatementは,CallableStatement(PreparedStatementを継承)も含むものとします(以降も同様です)。

StatementEventListenerのメソッドの呼び出し契機を次の表に示します。

表17‒91 StatementEventListenerのメソッドの呼び出し契機

メソッド

呼び出し契機

statementClosed

なし

statementErrorOccurred

SQL実行時にエラーとなり,PreparedStatementが無効となった時点

PreparedStatementが無効になる契機とstatementErrorOccurredメソッド呼び出し契機を次の表に示します。

表17‒92 PreparedStatementが無効になる契機とstatementErrorOccurredメソッド呼び出し契機

メソッド

statementErrorOccurredメソッド

呼び出し契機

対象PreparedStatement

SQLException

発生時

接続障害を示すSQLCODE(-720,-722,-723,-728,-732,-735,-932,-1700)※1

該当SQLException投入直前

SQLExceptionが発生したConnectionで生成したすべてのPreparedStatement

SQL実行エラーによる暗黙的ロールバック

トランザクション決着時(STATEMENT_COMMIT_BEHAVIOR=FALSEの場合※2

Connection.commit,XAResource.commit実行時

無効となったPreparedStatementを使用したことで発生するSQLException(SQLCODE=-901,又は-1512)投入直前

SQLException発生時に処理対象としているPreparedStatement

XAResource.prepareでのトランザクション決着時

Connection.rollback,XAResource.rollback実行時

CALL文実行時(プロシジャ内でトランザクション決着)

PURGE TABLE実行時

定義系SQL実行時(PDDDLDEAPRPEXE=YES,又はPDDDLDEAPRP=YESの場合※3

SET SESSION AUTHORIZATION実行時

SQLExceptionを伴わない接続障害発生時

XAResourceのメソッド実行時に接続障害によってXAException投入

無効となったConnectionを使用したことで発生するSQLException(SQLCODE=-563)投入直前

接続障害が発生したConnectionで生成したすべてのPreparedStatement

InputStreamによるデータ取得時に接続障害によってIOException投入

PrdbConnection.checkSession実行時にSESSION_ALIVE以外が返却

Connection.isValidでfalseが返却

注※1

ConnectionEventListenerも登録されている場合,StatementEventListenerの呼び出しを先行します。

注※2

STATEMENT_COMMIT_BEHAVIORの指定方法,及び優先順位については,「接続情報の優先順位」の「ステートメントのコミット実行後の状態」を参照してください。

注※3

PDDDLDEAPRPEXE,PDDDLDEAPRPの指定方法,及び優先順位については,「接続情報の優先順位」の「そのほかのクライアント環境定義の優先順位」を参照してください。