重要なJDBCクラスおよびインタフェース

標準およびTimesTen固有のJDBCパッケージ、クラスおよびインタフェースのサポートについて説明します。

次の内容を含みます。

標準JDBCの参照情報は、次の場所にあるjava.sqlおよびjavax.sqlパッケージについての情報を参照してください。

https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html
https://docs.oracle.com/javase/8/docs/api/javax/sql/package-summary.html

TimesTen JDBC拡張のリファレンス情報は、Oracle TimesTen In-Memory Database JDBC拡張Java APIリファレンスを参照してください。

ノート:

TimesTenでは、Java 8 API (JDBC 4.2)がサポートされます。

パッケージのインポート

アプリケーション用にいくつかのJDBCパッケージをインポートする必要があります。

JDBCを使用するJavaプログラムには、標準のJDBCパッケージをインポートします。

import java.sql.*;

データ・ソースまたはプールされている接続を使用する場合は、標準拡張JDBCパッケージもインポートします。

import javax.sql.*;

TimesTen JDBCパッケージをインポートします。

import com.timesten.jdbc.*;

JTAにXAデータ・ソースを使用するには、このTimesTenパッケージもインポートします。

import com.timesten.jdbc.xa.*;

java.sqlパッケージ内のインタフェースのサポート

TimesTenでは、java.sqlのインタフェースがサポートされています。

表2-1に、サポートされているインタフェースを示し、TimesTen固有のサポート状況および制限事項も示します。

「TimesTen JDBC拡張機能」も参照してください。

表2-1 サポートされているjava.sqlインタフェース

java.sql内のインタフェース TimesTenでのサポートに関する注意事項

Blob

  • 指定したバイト・パターンまたはBLOBパターンが開始する位置を戻すposition()メソッドはサポートされていません。

CallableStatement

  • 名前ではなく、位置を使用してパラメータをCallableStatementに渡す必要があります。

  • SQLのエスケープ構文は使用できません。

  • これらは、ArrayStructまたはRefではサポートされていません。

  • setDate()getDate()setTime()またはgetTime()Calendarはサポートされていません。

Clob

  • 指定した文字パターンまたはCLOBパターンが開始する位置を戻すposition()メソッドはサポートされていません。

Connection

  • セーブポイントはサポートされていません。

  • TimesTenでは、コミット読取り分離レベルとシリアライズ可能分離レベルがサポートされています。

    setTransactionIsolation
         (TRANSACTION_READ_COMMITTED);
    
    setTransactionIsolation
         (TRANSACTION_SERIALIZABLE);

    プリフェッチと分離レベルの間の関係については、「複数のデータ行のフェッチ」を参照してください。また、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』分離およびロックによる同時実行性制御、および『Oracle TimesTen In-Memory Databaseリファレンス』分離を参照してください。

DatabaseMetaData

  • 制限はありません。

  • supportsRefCursors()メソッドはTRUEを返します。

  • getMaxLogicalLobSize()メソッドは、TimesTenがLOBの論理サイズに使用できる最大バイト数を返します。

Driver

  • TimesTenではjava.util.loggingを使用しないため、getParentLogger()メソッドはSQLFeatureNotSupportedExceptionを返します。(TimesTenドライバはjava.util.logging機能よりも上位にあり、独自のロギング・メカニズムを使用します。)

NClob

  • 指定した文字パターンまたはNCLOBパターンが開始する位置を戻すposition()メソッドはサポートされていません。

ParameterMetaData

  • JDBCドライバは、列がNULL値可能かどうかを判別できません。また、isNullable()へのコールからは、常にparameterNullableUnknownを返します。

  • getScale()メソッドは、VARCHARNVARCHARおよびVARBINARYのデータ型がINLINEの場合、それらに対して1を返します。(スケールは、これらのデータ型では重要ではありません。)

PreparedStatement

  • PreparedStatementgetMetaData()はサポートされていません。

  • これらは、ArrayStructまたはRefではサポートされていません。

  • setObject(java.util.Calendar)およびsetDate(java.util.Date)を使用した設定はTIMESTAMPにマップされます。setDate()getDate()setTime()またはgetTime()Calendar型はサポートされていません。

ResultSet

  • ResultSetでは、getMetaData()をサポートしています。

  • 1つの文に複数のオープンResultSetオブジェクトを持つことはできません。

  • 結果セットの保持可能性は指定できないため、カーソルのコミット後に、そのカーソルをオープンしたままにできません。

  • スクロール可能な結果セットおよび更新可能な結果セットはサポートされていません。

  • これらは、ArrayStructまたはRefではサポートされていません。

  • setDate()getDate()setTime()またはgetTime()Calendar型はサポートされていません。

  • TimesTen実装では、setFetchSize()およびgetFetchSize()を使用して、クライアント/サーバーの結果セット・バッファ内のデータの最大行数を設定または取得できます。「JDBCを使用したクライアント/サーバーでの結果セット・バッファ・サイズの構成」を参照してください
  • 「TimesTen結果セットの使用: ヒントおよび制限」を参照してください。

ResultSetMetaData

  • getPrecision()メソッドは、精度が未定義の場合に0を返します。

  • getScale()メソッドは、スケールが未定義の場合に-127を返します。

RowId

  • ROWIDデータ型には、RowIdインタフェースを使用してアクセスできます。

  • 出力および入力/出力行IDはTypes.ROWIDとして登録できます。

  • メタデータ・メソッドによって、Types.ROWIDRowIdの適切なものが返されます。

Statement

Wrapper

  • TimesTenは、Wrapperを通じてTimesTenConnectionTimesTenCallableStatementTimesTenPreparedStatementおよびTimesTenStatementを公開します。

java.sqlパッケージ内のクラスのサポート

TimesTenでは、特定のjava.sqlクラス(およびSQLExceptionの一部のサブクラス)がサポートされています。

表2-2 サポートされているjava.sqlクラス

java.sql内のインタフェース TimesTenでのサポートに関する注意事項

DataTruncation

注意事項なし

Date

注意事項なし

DriverManager

注意事項なし

DriverPropertyInfo

注意事項なし

Time

TimesTenはTIMEデータ型のTIMEZONEをサポートしていないため、Javaクライアント/サーバー・アプリケーションはサーバーと同じタイム・ゾーンで実行する必要があります。

Timestamp

TIMESTAMPについてもTIMEと同じ考慮事項。

Types

注意事項なし

SQLException

注意事項なし

SQLFeatureNotSupportedException

注意事項なし

SQLWarning

注意事項なし

java.ioパッケージ内のクラスのサポートに関するノート

TimesTenでのjava.ioパッケージ内のクラスのサポートについて特別な注意事項を示します。

  • TimesTenによって返されるInputStreamオブジェクトは、マークまたはリセット操作(具体的にはmark()markSupported()およびreset()メソッド)をサポートしていません。

  • InputStreamまたはReaderオブジェクト内のデータ量にかかわらず、メソッド・コールで使用されるバッファ長が0のとき、InputStreamまたはReaderオブジェクトのread()メソッドでは0(ゼロ)が返されます。したがって、SQL EMPTY_CLOB()ファンクションを使用して入力した場合のように、CLOBの長さが0のとき、次のような使用は問題になることがあります。

    java.io.Reader r = myclob.getCharacterStream();
    char[] buf = new char[myclob.length()]; //buf for r.read() call

    通常、read()をコールして、ストリームの最後に達すると-1が返されます。ただし、前の例では-1が返されることはありません。InputStreamを返すBLOB getBinaryStream()メソッド、InputStreamを返すCLOB getAsciiStream()メソッド、Readerを返すCLOB getCharacterStream()メソッドによって返されるストリームを使用する場合は、これに注意してください。

javax.sqlパッケージ内のインタフェースとクラスのサポート

TimesTenでは、特定のjavax.sqlインタフェースがサポートされています。

  • CommonDataSourceおよびDataSourceTimesTenDataSourceによって実装されています。

    TimesTenではjava.util.loggingを使用しないため、CommonDataSourceで指定されたgetParentLogger()メソッドはSQLFeatureNotSupportedExceptionを返します。(TimesTenドライバはjava.util.logging機能よりも上位にあり、独自のロギング・メカニズムを使用します。)

  • PooledConnectionは、ObservableConnectionで実装されています。

  • ConnectionPoolDataSourceObservableConnectionDSで実装されています。

  • XADataSourceTimesTenXADataSource(com.timesten.jdbc.xaパッケージ内)で実装されています。

ノート:

TimesTen JDBCドライバ自身は、データベース接続プールを実装していません。ObservableConnectionおよびObservableConnectionDSクラスは、標準Java EEインタフェースを実装しているだけであり、Java EE標準に基づいたデータベース接続プールの作成および管理を簡単に行えます。

TimesTenではこのjavax.sqlイベント・リスナーをサポートしています。

  • PooledConnectionインスタンスの使用時、ConnectionEventListenerインスタンスを登録しConnectionEventの出現をリスニングできます。

ノート:

TimesTenではStatementEventListenerインスタンスは登録できますが、StatementEventインスタンスはサポートされていません。

TimesTen JDBC拡張機能

ほとんどのシナリオには、TimesTenでサポートされている標準のJDBC機能を使用できます。ただし、TimesTenでは、TimesTen固有の機能に対して、com.timesten.jdbcパッケージ内に拡張機能も用意されています。

これを表2-3に示します。

表2-3 TimesTen JDBC拡張機能

インタフェース 拡張 注意事項

TimesTenBlob

Blob

BlobインスタンスはTimesTenBlobにキャストできます。これには、LOBがOracle DatabaseパススルーLOBであるかを示したり、LOBリソースを解放したり、位置と長さの指定とともにバイナリ・ストリームを取得する機能があります。

「ラージ・オブジェクト(LOB)」を参照してください。

TimesTenCallableStatement

CallableStatement

java.sql.Wrapperにより公開されます。

PL/SQL REF CURSORのサポート。「REF CURSORの使用」を参照してください。

入力パラメータを設定し出力パラメータを取得および登録するメソッドとともに、連想配列バインドをサポートしています。「連想配列の使用」を参照してください。

TimesTenClob

Clob

ClobインスタンスはTimesTenClobにキャストできます。これには、LOBがOracle DatabaseパススルーLOBであるかを示したり、LOBリソースを解放したり、位置と長さの指定とともに文字のストリームを取得する機能があります。

「ラージ・オブジェクト(LOB)」を参照してください。

TimesTenConnection

Connection

java.sql.Wrapperにより公開されます。

パフォーマンスの向上のための行のプリフェッチ、問合せのパフォーマンスの最適化、自動クライアント・フェイルオーバーのためのイベントのリスニング、レプリケーション・トラックを指定するパラレル・レプリケーション・スキームのトラック番号の設定、データベースの妥当性のチェック、およびクライアント/サーバーの結果セット・バッファの最大行数またはバイト数の設定などの機能を提供します。

「複数のデータ行のフェッチ」「問合せパフォーマンスの最適化」「一般的なクライアント・フェイルオーバー機能」「レプリケーションで使用する機能」「データベースの妥当性の確認」および「JDBCを使用したクライアント/サーバーでの結果セット・バッファ・サイズの構成」を参照してください。

TimesTenNClob

NClob

NClobインスタンスはTimesTenNClobにキャストできます。これには、LOBがOracle DatabaseパススルーLOBであるかどうかを示す機能を含みます。

「ラージ・オブジェクト(LOB)」を参照してください。

TimesTenPreparedStatement

PreparedStatement

java.sql.Wrapperにより公開されます。

DML RETURNINGをサポートしています。「DML RETURNING (RETURNING INTO句)の使用」を参照してください。

入力パラメータを設定するメソッドとともに連想配列のバインドをサポートしています。「連想配列の使用」を参照してください。

TimesTenStatement

Statement

java.sql.Wrapperにより公開されます。

クライアント/サーバーの結果セット・バッファについて、問合せしきい値を指定したり、行またはバイトの最大数を設定または取得する機能を提供します。「SQL文のしきい値期間の設定」および「JDBCを使用したクライアント/サーバーでの結果セット・バッファ・サイズの構成」を参照してください

その他のTimesTenクラスおよびインタフェース

前述の実装に加えて、com.timesten.jdbcパッケージには、インタフェースおよびクラスがあります。

これらのインタフェースおよびクラスでサポートされた機能は、この章の後半で説明します。

  • TimesTen型の拡張(TimesTen REF CURSORなど)にインタフェースTimesTenTypesを使用します。

  • 自動クライアント・フェイルオーバー機能に、インタフェースClientFailoverEventListener(および次に説明するClientFailoverEventクラス)を使用します。「自動クライアント・フェイルオーバーのJDBCサポート」を参照してください。

  • SQL例外に使用されるベンダー・コードに、インタフェースTimesTenVendorCodeを使用します。

  • TimesTen Scaleoutでのクライアント・ルーティングにインタフェースTimesTenDistributionKeyおよびTimesTenDistributionKeyBuilderを使用します。「TimesTen Scaleoutのクライアント・ルーティングAPI」を参照してください

  • インタフェースTimesTenConnectionBuilderを使用して、分散キー、要素IDまたはレプリカ・セットIDに基づいて最適な要素に接続します。「分散キーに基づく要素への接続」を参照してください。

  • 自動クライアント・フェイルオーバー機能に、クラスClientFailoverEvent(および前述のClientFailoverEventListenerインタフェース)を使用します。