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.2 適切なドライバの選択
- 
                           
一般的に、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のクライアント・ドライバ
tcpとtcpsの両方で、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リリース23aiでのJDBC OCIドライバまたはJDBC Thinドライバ固有の機能を示します。
表1-1 JDBC OCIドライバとJDBC Thinドライバの機能の相違点
| JDBC OCIドライバ | JDBC Thinドライバ | 
|---|---|
| 
                                  OCI接続プーリング  | 
                              
                                  なし  | 
                           
| 
                                  透過的アプリケーション・フェイルオーバー(TAF)  | 
                              
                                  なし  | 
                           
| 
                                  なし  | 
                              
                                  配列DMLの反復ごとの行数のサポート  | 
                           
| 
                                  なし  | 
                              
                                  Oracle Advanced SecurityにおけるSHA-2のサポート  | 
                           
| 
                                  
  | 
                              
                                  なし  | 
                           
| 
                                  なし  | 
                              
                                  Oracleアドバンスト・キューイング  | 
                           
| 
                                  なし  | 
                              
                                  
  | 
                           
| 
                                  なし  | 
                              
                                  ローカル・トランザクションからグローバル・トランザクションへの昇格のサポート  | 
                           
| なし | シャード・データベース・アクセス用のJavaデータソース | 
| なし | リアクティブ・ストリームの収集のためのJavaライブラリ | 
| なし | JDBCリアクティブ・エクステンション | 
| なし | ネイティブJSONタイプのサポート | 
ノート:
- 
                              
OCIの最適化フェッチ機能は、JDBC OCIドライバの内部機能であり、JDBC Thinドライバには適用されません。
 - 
                              
JDBC OCIドライバ機能の一部は、OCIライブラリから継承されたもので、Thin JDBCドライバでは使用できません。
 
1.5 環境およびサポート
この項では、JDBCアプリケーションの実行に必要なツールおよび環境について簡単に説明します。
1.5.1 サポートされるJDKおよびJDBCのバージョン
Oracle Database 23aiでは、すべてのJDBCドライバにJDK 8、JDK 11およびJDK 17との互換性があり、ojdbc8.jar、ojdbc11.jarおよびojdbc17.jarファイルでこれらのJDKバージョンに対するサポートが提供されます。
                     
ojdbc8.jarファイルを使用する場合
ojdbc8.jarファイルは、JDBC 4.2の機能を必要としておりJDK 8およびJDK 11でコードをコンパイルする必要がある場合に使用します。
                        
ojdbc11.jarファイルを使用する場合
ojdbc11.jarファイルは、JDBC 4.3の機能を必要としておりJDK 11でコードをコンパイルする必要がある場合に使用します。
                        
関連項目:
JDBC FAQページojdbc17.jarファイルを使用する場合
ojdbc17.jarファイルは、JDBC 4.3の機能を必要としておりJDK 17以上でコードをコンパイルする必要がある場合に使用します。このJARファイルは、Jakarta APIと互換性があります。
                        
1.5.2 JNI環境およびJava環境
JDBC OCIドライバは、OCI Cライブラリのコールに、標準Java Native Interface (JNI)を使用しています。Java仮想マシン(JVM)、特にMicrosoft社やIBM社のJVMでJDBC OCIドライバを使用できます。
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アーティファクトは、その特定のフォーカス領域の下にあります。たとえば、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 | 
                                    oraclepki.jar | 
                                 
com.oracle.database.ha | 
                                    ons.jar, simplefan.jar | 
                                 
com.oracle.database.nls | 
                                    orai18n.jar | 
                                 
com.oracle.database.xml | 
                                    xdb.jar、xdb6.jar、xmlparserv2.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.jar、ucp.jar、oraclepki.jar、ons.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  | 
                           
| 
                                  
  | 
                              
                                  12.1  | 
                              なし | 
| 透過的アプリケーション・コンティニュイティ | なし | 18c | 
| JSONデータの検証のサポート | 18c | 18c | 
| 軽量接続検証のサポート | なし | 18c | 
| REF CURSORをINバインド変数としてサポート | 18c | 18c | 
| キーストア・サービスのサポート | なし | 18c | 
| 簡易接続プラス(簡易接続ネーミング構文の改善) | なし | 19c | 
| IAMのトークンベース認証 | なし | 19c | 
| Azure ADのトークンベース認証 | なし | 19c | 
| リアクティブ・ストリームの収集のためのJavaライブラリ | なし | 21c | 
| シャード・データベース・アクセス用のJavaデータソース | なし | 21c | 
| JDBCでのネイティブJSONデータ型のサポート | なし | 21c | 
| JDBCリアクティブ・エクステンション | なし | 21c | 
| Java仮想スレッド | なし | 21c | 
| JDBCでのパイプライン処理のサポート | 23ai | 23ai | 
| JDBCサービス・プロバイダ拡張機能 | なし | 23ai | 
| 自己駆動型診断機能 | なし | 23ai | 
| Kerberosの制約付き委任 | なし | 23ai | 
| RADIUSチャレンジ・レスポンス認証 | なし | 23ai | 
| True Cacheデータ・ソース | 23ai | 23ai | 
| RSIでのデータ・ロード・モード | なし | 23ai | 
| Bequeathプロトコル | なし | 23ai | 
| 再開可能カーソル | なし | 23ai | 
| DRCPの複数プール | 23ai | 23ai | 
ノート:
- 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以降、非推奨となりました。- 暗黙的接続キャッシュ機能はサポート終了になりました。
 
