1 JDBCの概要

Java Database Connectivity(JDBC)は、Javaからリレーショナル・データベースに接続するためのインタフェースを提供するJava標準です。JDBCは、X/Open SQLコール・レベル・インタフェース(CLI)に基づいています。JDBC 4.0では、SQL 2003標準を使用してコンパイルします。

JDBC標準は定義済で、標準のjava.sqlインタフェースを介して実装されます。このため、各プロバイダは独自のJDBCドライバで標準を実装および拡張できます。この章では、JDBCのOracle実装の概要を説明します。内容は次のとおりです。

1.1 Oracle JDBCドライバの概要

Oracleドライバは、標準JDBC Application Program Interface(API)をサポートする他、Oracle固有のデータ型をサポートし、パフォーマンスを向上させる拡張機能を備えています。

Oracle JDBCドライバを次に示します。

  • Thinドライバ

    JDBC Thinドライバは、Pure JavaのType IVドライバで、アプリケーションで使用できます。プラットフォームに依存せず、クライアント側に追加のOracleソフトウェアは必要ありません。JDBC Thinドライバは、Oracle Databaseにアクセスするために、Oracle Net Servicesを使用してサーバーと通信します。

    JDBC Thinドライバを使用すると、Javaソケット上にOracle Net Servicesを実装することで、データベースに直接接続できます。このドライバでは、TCP/IPプロトコルがサポートされており、データベース・サーバーのTCP/IPソケットにTNSリスナーが必要です。

    ノート:

    特定のドライバによってのみサポートされる機能がないかぎり、Thinドライバを使用することをお薦めします。

  • Oracle Call Interface(OCI)ドライバ

    クライアント側で使用されるドライバで、Oracleクライアントのインストールが必要です。アプリケーションでのみ使用できます。

    JDBC OCIドライバは、Javaアプリケーション用のType IIドライバです。これには、プラットフォーム固有のOCIライブラリが必要です。IPC(プロセス間通信)、名前付きパイプ、TCP/IPおよびInternetwork Packet Exchange/Sequenced Packet Exchange(IPX/SPX)を含む、インストールされたすべてのOracle Netアダプタをサポートします。

    JDBC OCIドライバはJavaとCを組み合せて記述されており、Cエントリ・ポイントをコールするネイティブ・メソッドを使用してJDBCの起動をOCIへのコールに変換します。これらのコールでは、Oracle Net Servicesを使用してデータベースと通信します。

    JDBC OCIドライバは、インストールされたクライアント・コンピュータにあるOCIライブラリ、Cエントリ・ポイント、Oracle Net、コア・ライブラリおよびその他の必要なファイルを使用します。

    OCIは、第3世代言語のネイティブ・プロシージャやファンクション・コールを使用して、Oracle Databaseにアクセスし、SQL文処理のすべての段階を制御するアプリケーションを作成できるようにするAPIです。

  • サーバー側Thinドライバ

    機能的にはクライアント側Thinドライバと同じです。ただし、データベース・サーバーで実行され、同じサーバーまたは任意の層のリモート・サーバーで別セッションにアクセスする必要があるコード用です。

    JDBCサーバー側Thinドライバは、クライアント側で実行されるJDBC Thinドライバと同じ機能を提供します。ただし、JDBCサーバー側ThinドライバはOracle Databaseの内部で実行され、リモート・データベース、または同じデータベースの別セッションにアクセスし、データベース内のJavaと連携します。

    このドライバは、次の場合に役立ちます。

    • 中間層として機能を果すOracle Databaseインスタンスからリモートのデータベース・サーバーにアクセスする場合

    • Javaストアド・プロシージャなどのOracle Databaseセッションの内部から別のOracle Databaseセッションにアクセスする場合

    JDBC Thinドライバをクライアント・アプリケーションから使用する場合とサーバーの内部から使用する場合で、コード上の違いはありません。

  • サーバー側内部ドライバ

    データベース・サーバーで実行され、同じセッションにアクセスするコード用です。つまり、このコードは、単一のOracleセッションから実行され、データにアクセスします。

    JDBCサーバー側内部ドライバは、Javaストアド・プロシージャなど、Oracle Databaseの内部で実行され、同じデータベースにアクセスする、あらゆるJavaコードをサポートします。このドライバにより、Oracle Java仮想マシン(Oracle JVM)はSQLエンジンと直接通信し、データベース内のJavaと連携します。

    JDBCサーバー側の内部ドライバ、Oracle JVM、データベースおよびSQLエンジンは、すべて同じアドレス空間の中で実行されます。このため、ネットワーク・ラウンドトリップの問題は関係ありません。プログラムは、関数呼出しを使用してSQLエンジンにアクセスします。

    ノート:

    サーバー側内部ドライバでは、StatementクラスのcancelおよびsetQueryTimeoutメソッドはサポートされません。

    JDBCサーバー側内部ドライバは、クライアント側ドライバとの一貫性を保ち、同一の機能と拡張機能をサポートします。

次の表は、Oracle JDBCドライバとOracle Databaseのアーキテクチャを示しています。

図1-1 Oracle JDBCドライバとOracle Databaseのアーキテクチャ

図1-1の説明が続きます
「図1-1 Oracle JDBCドライバとOracle Databaseのアーキテクチャ」の説明

1.2 適切なドライバの選択

アプリケーションまたはアプレット用のJDBCドライバを選択するときには、次の点を考慮します。

  • 一般的に、TCP/IP以外のネットワークのサポートなどのOCI固有の機能が必要でないかぎり、JDBC Thinドライバを使用します。

  • 最大限の移植性とパフォーマンスを実現するには、JDBC Thinドライバを使用します。JDBC Thinドライバを使用すると、アプリケーションからOracle Databaseに接続できます。

  • Transport Layer Security (TLS)を介してLightweight Directory Access Protocol (LDAP)を使用する場合は、JDBC Thinドライバを使用します。

  • Oracleクライアントの環境で使用するクライアント・アプリケーションを作成し、TCP/IP以外のネットワークのサポートなど、OCIドライバ固有の機能が必要な場合は、JDBC OCIドライバを使用します。

  • データベース・サーバー内で動作し、リモート・データベースまたは同じデータベース・インスタンス内の別のセッションにアクセスする必要があるコードの場合は、JDBCサーバー側Thinドライバを使用します。

  • コードがデータベース・サーバー内で動作し、セッション内でローカルにデータにアクセスする必要がある場合は、JDBCサーバー側内部ドライバを使用して、該当するサーバーにアクセスします。

1.3 Oracle JDBCドライバのユースケース

この項では、Oracle JDBCドライバのユースケースについて説明します。

JDBC Thinドライバまたはタイプ4のクライアント・ドライバ

tcptcpsの両方で、TCP/IPプロトコルを介してOracle Databaseにアクセスするには、クライアント側のJavaアプリケーションでJDBC Thinドライバを使用する必要があります。これは、次のリストに抜粋されている様々な機能を提供しているという理由でOracleがお薦めしている最も広く使用されているドライバです。

  • 反復ごとの行数
  • ローカル・トランザクションからグローバル・トランザクションへの昇格のサポート
  • トランザクション・ガード
  • 透過的アプリケーション・コンティニュイティおよびアプリケーション・コンティニュイティ
  • リアクティブ・ストリームの収集ライブラリのサポート
  • JDBCリアクティブ・エクステンション

関連項目:

機能リスト

JDBC OCIドライバまたはタイプ2のクライアント・ドライバ

アプリケーションでプラットフォーム固有のOCIライブラリに依存する次の機能を使用する場合のみ、クライアント側のJavaアプリケーションでJDBC OCIドライバを使用する必要があります。

  • Bequeathプロトコル

    このプロコルでは、リスナーを経由せずにローカル接続を使用できます。通常、データベース管理者は様々な管理操作を実行するために使用しますが、管理者以外のユーザーもこのプロトコルを使用できます。

  • OS認証

    JDBC OCIドライバは、クライアントとサーバーが同じコンピュータ上にある場合、LinuxでのOS認証をサポートします。ウィンドウ・ドメインでは、複数のコンピュータ間でもOS認証をサポートします。

  • 読取りトランザクションのフェイルオーバーをサポートする透過的アプリケーション・フェイルオーバー(TAF)。

    関連項目:

    完全な高可用性機能の詳細は、Javaのアプリケーション・コンティニュイティを参照してください

サーバー側内部ドライバまたはタイプ2のサーバー側ドライバ

このドライバは、データベース・サーバーに埋め込まれたJVM上で実行され、同じデータベース・セッションにアクセスするJavaコードに使用する必要があります。これは、コードが実行され、単一のデータベース・セッションのデータにアクセスすることを意味します。このドライバは、JDBC KPRBドライバとも呼ばれます。

このドライバは、データベースに埋め込まれたJVM (Oracle JVMとも呼ばれます)に組み込まれており、完全な機能を備えたドライバではありません。

サーバー側Thinドライバまたはタイプ4のサーバー側ドライバ

このドライバは次のシナリオで使用する必要があります。

  • 中間層として機能するOracle Databaseインスタンスからリモートのデータベース・サーバーにアクセスする場合
  • Javaストアド・プロシージャなど、別のセッション内からOracle Databaseセッションにアクセスする場合

このドライバはOracle JVMに組み込まれており、完全機能を備えたドライバではありません。

1.4 JDBC OCIドライバとJDBC Thinドライバの機能の相違点

次の表に、Oracle Databaseリリース23cでのJDBC OCIドライバまたはJDBC Thinドライバ固有の機能を示します。

表1-1 JDBC OCIドライバとJDBC Thinドライバの機能の相違点

JDBC OCIドライバ JDBC Thinドライバ

OCI接続プーリング

なし

透過的アプリケーション・フェイルオーバー(TAF)

なし

なし

配列DMLの反復ごとの行数のサポート

なし

Oracle Advanced SecurityにおけるSHA-2のサポート

oraaccess.xml構成ファイル設定

なし

なし

Oracleアドバンスト・キューイング

なし

O7L_MRクライアント機能のサポート

なし

ローカル・トランザクションからグローバル・トランザクションへの昇格のサポート

なし シャード・データベース・アクセス用のJavaデータソース
なし リアクティブ・ストリームの収集のためのJavaライブラリ
なし JDBCリアクティブ・エクステンション
なし ネイティブJSONタイプのサポート

ノート:

  • OCIの最適化フェッチ機能は、JDBC OCIドライバの内部機能であり、JDBC Thinドライバには適用されません。

  • JDBC OCIドライバ機能の一部は、OCIライブラリから継承されたもので、Thin JDBCドライバでは使用できません。

1.5 環境およびサポート

この項では、JDBCアプリケーションの実行に必要なツールおよび環境について簡単に説明します。

1.5.1 サポートされるJDKおよびJDBCのバージョン

Oracle Database 23cでは、すべてのJDBCドライバにJDK 8、JDK 11およびJDK 17との互換性があり、ojdbc8.jarおよびojdbc11.jarファイルでこれらのJDKバージョンに対するサポートが提供されます。

ojdbc8.jarファイルを使用する場合

ojdbc8.jarファイルは、JDBC 4.2の機能を必要としておりJDK 8およびJDK 11でコードをコンパイルする必要がある場合に使用します。

ojdbc11.jarファイルを使用する場合

ojdbc11.jarファイルは、JDBC 4.3の機能を必要としておりJDK 11およびJDK 17でコードをコンパイルする必要がある場合に使用します。

関連項目:

JDBC FAQページ

1.5.2 JNI環境およびJava環境

JDBC OCIドライバは、OCI Cライブラリのコールに、標準Java Native Interface (JNI)を使用しています。Java仮想マシン(JVM)、特にMicrosoft社やIBM社のJVMでJDBC OCIドライバを使用できます。

1.5.3 JDBCとIDE

Oracle JDeveloper Suiteは、開発者に対し、インターネット用のコンポーネント・ベースのデータベース・アプリケーションを作成、デバッグおよびデプロイするための、単一の統合された製品群を提供します。Oracle JDeveloper環境には、JDBC Thinドライバおよびシステム固有のOCIドライバなど、JDBCの統合サポートが含まれています。Oracle JDeveloperのデータベース・コンポーネントは、JDBCドライバを使用してクライアントとサーバー上で稼働するアプリケーション間の接続を管理します。

1.5.4 Maven Centralでの可用性

サポートされているすべてのリリースのOracle JDBCドライバ(21.1.0.0、19.9.0.0、19.8.0.0、19.6.0.0、19.3.0.0、18.3.0.0など)が、Maven Centralで入手できます。そのため、Oracle JDBCドライバおよびコンパニオンJARファイルの配布センターとしてMaven Centralを検討できます。

Maven CentralにおけるJDBCドライバおよびコンパニオンJARファイルのグループID

Maven CentralにおけるすべてのOracle Databaseアーティファクトが、次のイメージに示すように、同じ包括的オブジェクトcom.oracle.databaseの下に存在します。

Oracle Databaseアーティファクトに対するMaven Centralの場所

Oracle Databaseアーティファクトは、その特定のフォーカス領域の下にあります。たとえば、JDBC、XML、セキュリティ、高可用性(HA )、NLS、可観測性などです。次の表に、JDBCドライバおよびコンパニオンJARファイルのグループIDを示します。

グループID 対応するJARファイル
com.oracle.database.jdbc ojdbc11.jar, ojdbc10.jar, ojdbc8.jar, ojdbc6.jar, ojdbc5.jar, ucp.jar, ojdbc10dms.jar, ojdbc8dms.jar, ojdbc6dms.jar, ojdbcd5dms.jar
com.oracle.database.jdbc.debug ojdbc11_g.jar, ojdbc10_g.jar, ojdbc8_g.jar, ojdbc6_g.jar, ojdbc5_g.jar, ojdbc11dms_g.jar, ojdbc10dms_g.jar, ojdbc8dms_g.jar, ojdbc6dms_g.jar, ojdbc5dms_g.jar
com.oracle.database.security osdt_core.jarosdt_cert.jaroraclepki.jar
com.oracle.database.ha ons.jar, simplefan.jar
com.oracle.database.nls orai18n.jar
com.oracle.database.xml xdb.jarxdb6.jarxmlparserv2.jar
com.oracle.database.observability dms.jar

ノート:

  • ojdbc8dms.jarおよびojdbc11dms.jarファイルは、Dynamic Monitoring System (DMS)の完全サポートと、java.util.loggingパッケージの制限付きサポートを提供しています。
  • xdb6.jarはレガシー名です。新しい名前はxdb.jarです。

GAVを使用したMaven Centralでの依存性の管理

JDBCとUCPの依存性は、この項で定義されているように、対応するグループID、アーティファクトIDおよびバージョン(GAV)を使用することによってプロジェクトのpom.xmlファイルで管理できます。たとえば、次のGAVは、19.3リリースからojdbc10.jarucp.jaroraclepki.jarosdt_core.jarosdt_cert.jarons.jarおよびsimplefan.jarを引き出します。

<dependency>
      <groupId>com.oracle.database.jdbc</groupId>
      <artifactId>ojdbc10</artifactId>
      <version>19.3.0.0</version>
    </dependency>

同様に、次のGAVでは、19.3.0.0リリースからorai18n.jarファイルを引き出します。

<dependency>
      <groupId>com.oracle.database.nls</groupId>
      <artifactId>orai18n</artifactId>
      <version>19.3.0.0</version>
    </dependency>

関連項目:

JDBC FAQページ

1.6 機能リスト

この項では、サポートされている機能と、JDBC OCIドライバおよびJDBC Thinドライバでその機能が最初にサポートされた対応するバージョンを示します。

表1-2 機能リスト

機能 JDBC OCI JDBC Thin

TimeZoneのパッチ

11.2

11.2

セキュアなLOBのサポート

11.2

11.2

LOBプリフェッチのサポート

11.2

11.2

ネットワーク接続プール

なし

11.2

列セキュリティのサポート

なし

11.2

XML型のキューのサポート(AQ)

なし

11.2

通知グループ(AQとDCN)

なし

11.2

SimpleFAN

11.2

11.2

アプリケーション・コンティニュイティ

12.2

12.1

トランザクション・ガード

12.2

12.1

SQL文変換

なし

12.1

データベース常駐接続プーリング

12.1

12.1

Oracle Advanced SecurityにおけるSHA-2のサポート

なし

12.1

非表示列のサポート

12.1

12.1

パラメータとしてPL/SQLパッケージ・タイプのサポート

12.1

12.1

データベースの動作の監視のサポート

12.1

12.1

様々なデータ型の長さの制限拡張のサポート

12.1

12.1

暗黙的結果のサポート

12.1

12.1

配列DMLの反復ごとの行数のサポート

なし

12.1

oraaccess.xml構成ファイル設定

12.1

なし
透過的アプリケーション・コンティニュイティ なし 18c
JSONデータの検証のサポート 18c 18c
軽量接続検証のサポート なし 18c
REF CURSORをINバインド変数としてサポート 18c 18c
キーストア・サービスのサポート なし 18c
簡易接続プラス(簡易接続ネーミング構文の改善) なし 19c
リアクティブ・ストリームの収集のためのJavaライブラリ なし 21c
シャード・データベース・アクセス用のJavaデータソース なし 21c
JDBCでのネイティブJSONデータ型のサポート なし 21c
JDBCリアクティブ・エクステンション なし 21c
JDBCでのパイプライン処理のサポート 23c 23c

ノート:

  • JDBCドライバの次の機能は、リリース11.2より前のリリースで導入されました。
    • NLSサポート
    • 新規文キャッシュAPI
    • 行のプリフェッチ
    • Java Native Interface
    • ネイティブLOB
    • 連想配列/索引付き表
    • 暗黙的文キャッシュ
    • 明示的文キャッシュ
    • 一時LOB
    • オブジェクト型の継承
    • マルチ・レベル・コレクション
    • oracle.jdbcインタフェース
    • ネイティブXA
    • OCI接続プーリング
    • 透過的アプリケーション・フェイルオーバー
    • 暗黙的接続キャッシュ
    • 高速接続フェイルオーバー
    • 接続ラップ
    • DMS
    • URLのサービス名
    • 名前による文パラメータの設定
    • エンドツーエンドのトレース
    • Web RowSet
    • プロキシ認証
    • 実行時接続ロード・バランシング
    • LOB用の拡張setXXXおよびgetXXXメソッド
    • XA接続キャッシュ
    • DML RETURNING
    • JSR 114 RowSets
    • SSL/TLS暗号化
    • SSL/TLS認証
    • AES暗号化
    • SHA1ハッシュ
    • RADIUS認証
    • Kerberos認証
    • ANYDATAおよびANYTYPE
    • ネイティブAQ
    • 問合せ変更通知
    • データベースの起動および停止
    • データ型のファクトリ・メソッド
    • バッファ・キャッシュ
    • セキュアなファイルのLOB
    • 診断機能
    • サーバー結果キャッシュ
    • ユニバーサル接続プール
  • ConnectionCacheImpl接続キャッシュ機能はOracle Database 10g以降、非推奨となりました。
  • 暗黙的接続キャッシュ機能はサポート終了になりました。