17.8.1 JDBC4.0 APIでの追加機能
JDBC4.0 APIで追加された機能のうち,サポートする機能とドライバを次の表に示します。
|
機能 |
サポートするドライバ |
||
|---|---|---|---|
|
JDBC2.0 |
JDBC4.0 |
JDBC4.3 |
|
|
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が返却 |
|||
- 注※1
-
ConnectionEventListenerも登録されている場合,StatementEventListenerの呼び出しを先行します。
- 注※2
-
STATEMENT_COMMIT_BEHAVIORの指定方法,及び優先順位については,「接続情報の優先順位」の「ステートメントのコミット実行後の状態」を参照してください。
- 注※3
-
PDDDLDEAPRPEXE,PDDDLDEAPRPの指定方法,及び優先順位については,「接続情報の優先順位」の「そのほかのクライアント環境定義の優先順位」を参照してください。