17.8.1 JDBC4.0 APIでの追加機能
JDBC4.0 APIで追加された機能のうち,サポートする機能とドライバを次の表に示します。
機能 |
サポートするドライバ |
|
---|---|---|
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が返却されます。
クラス名 |
サポート可否 |
---|---|
SQLNonTransientException |
○ |
SQLFeatureNotSupportedException |
○ |
SQLNonTransientConnectionException |
○ |
SQLDataException |
○ |
SQLIntegrityConstraintViolationException |
○ |
SQLInvalidAuthorizationException |
○ |
SQLSyntaxErrorException |
○ |
SQLTransientException |
○ |
SQLTransientConnectionException |
○ |
SQLTransactionRollbackException |
○ |
SQLTimeoutException |
○ |
SQLRecoverableException |
○ |
SQLClientInfoException |
○ |
詳細は,「SQLException拡張機能」を参照してください。
(6) スカラ関数追加
JDBC4.0では,スカラ関数が複数追加されました。追加されたスカラ関数と,サポートの可否を次の表に示します。
スカラ関数 |
サポート可否 |
---|---|
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のメソッドの呼び出し契機を次の表に示します。
メソッド |
呼び出し契機 |
---|---|
statementClosed |
なし |
statementErrorOccurred |
SQL実行時にエラーとなり,PreparedStatementが無効となった時点 |
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が返却 |