Java Database Connectivity(JDBC)は、Javaからリレーショナル・データベースに接続するためのインタフェースを提供するJava標準です。JDBC標準はSun社によって定義され、標準のjava.sql
インタフェースを介して実装されます。このため、各プロバイダは独自のJDBCドライバで標準を実装および拡張できます。JDBCは、X/Open SQLコール・レベル・インタフェース(CLI)に基づいています。JDBC 4.0では、SQL 2003標準を使用してコンパイルします。
この章では、JDBCのOracle実装の概要を説明します。内容は次のとおりです。
Oracleドライバは、標準JDBC Application Program Interface(API)をサポートする他、Oracle固有のデータ型をサポートし、パフォーマンスを向上させる拡張機能を備えています。
次のJDBCドライバがあります。
Thinドライバ
クライアント側で使用されるPure Javaドライバで、Oracleクライアントのインストールは必要ありません。アプレットとアプリケーションの両方で使用できます。
Oracle Call Interface(OCI)ドライバ
クライアント側で使用されるドライバで、Oracleクライアントのインストールが必要です。アプリケーションでのみ使用できます。
サーバー側Thinドライバ
機能的にはクライアント側Thinドライバと同じです。ただし、データベース・サーバーで実行され、同じサーバーまたは任意の層のリモート・サーバーで別セッションにアクセスする必要があるコード用です。
サーバー側内部ドライバ
データベース・サーバーで実行され、同じセッションにアクセスするコード用です。つまり、このコードは、単一のOracleセッションから実行され、データにアクセスします。
図1-1は、Oracle JDBCドライバとOracle Databaseのアーキテクチャを示しています。
この項の内容は次のとおりです。
サーバー側とクライアント側のOracle JDBCドライバの基本機能は同じです。
JDBC ThinドライバとOCIドライバは、Java Development Kit (JDK) 1.5および1.6をサポートします。サーバー側の内部ドライバは、JDK 1.5のみサポートします。JDBCドライバはすべて、次の標準と機能をサポートします。
共通の構文とAPI
共通のOracle拡張機能
マルチスレッド・アプリケーションの完全なサポート
Oracle JDBCドライバは、標準のjava.sql
インタフェースを実装します。標準の機能に加えて、oracle.jdbc
パッケージを使用することにより、Oracle固有の機能へのアクセスが可能になります。
JDBC Thinドライバ
JDBC Thinドライバは、Pure JavaのType IVドライバで、アプリケーションおよびアプレットで使用できます。プラットフォームに依存せず、クライアント側に追加のOracleソフトウェアは必要ありません。JDBC Thinドライバは、Oracle DatabaseにアクセスするためにSQL*Netを使用してサーバーと通信します。
JDBC Thinドライバを使用すると、Javaソケット上にSQL*Netを実装することで、データベースに直接接続できます。このドライバでは、TCP/IPプロトコルがサポートされており、データベース・サーバーのTCP/IPソケットにTNSリスナーが必要です。
JDBC OCIドライバ
JDBC OCIドライバは、Javaアプリケーション用のType IIドライバです。このドライバは、Oracleクライアントのインストールが必要であるため、Oracleプラットフォーム固有です。IPC(プロセス間通信)、名前付きパイプ、TCP/IPおよびInternetwork Packet Exchange/Sequenced Packet Exchange(IPX/SPX)を含む、インストールされたすべてのOracle Netアダプタをサポートします。
JDBC OCIドライバはJavaとCを組み合せて記述されており、Cエントリ・ポイントをコールするネイティブ・メソッドを使用してJDBCの起動をOCIへのコールに変換します。これらのコールは、SQL*Netを使用してデータベースとの通信を行います。
JDBC OCIドライバは、インストールされたクライアント・コンピュータにあるOCIライブラリ、Cエントリ・ポイント、Oracle Net、コア・ライブラリおよびその他の必要なファイルを使用します。
OCIは、第3世代言語のネイティブ・プロシージャやファンクション・コールを使用して、Oracle Databaseにアクセスし、SQL文処理のすべての段階を制御するアプリケーションを作成できるようにするAPIです。
JDBCサーバー側Thinドライバ
JDBCサーバー側Thinドライバは、クライアント側で実行されるJDBC Thinドライバと同じ機能を提供します。ただし、Oracle Databaseの内部で実行され、リモート・データベース、または同じデータベースの別セッションにアクセスします。
このドライバは、次の場合に役立ちます。
中間層として機能を果すOracle Databaseインスタンスからリモートのデータベース・サーバーにアクセスする場合
Javaストアド・プロシージャなどのOracle Databaseセッションの内部から別のOracle Databaseセッションにアクセスする場合
JDBC Thinドライバをクライアント・アプリケーションから使用する場合とサーバーの内部から使用する場合で、コード上の違いはありません。
JDBCサーバー側内部ドライバ
JDBCサーバー側内部ドライバは、Javaストアド・プロシージャなど、Oracle Databaseの内部で実行され、同じデータベースにアクセスする必要がある、あらゆるJavaコードをサポートします。このドライバにより、Oracle Java仮想マシン(Oracle JVM)はSQLエンジンと直接通信できます。このドライバでは、JDK 1.5のみをサポートしています。
JDBCサーバー側の内部ドライバ、Oracle JVM、データベースおよびSQLエンジンは、すべて同じアドレス空間の中で実行されます。このため、ネットワーク・ラウンドトリップの問題は関係ありません。プログラムは、関数呼出しを使用してSQLエンジンにアクセスします。
注意: サーバー側内部ドライバでは、Statement クラスのcancel およびsetQueryTimeout メソッドはサポートされません。 |
JDBCサーバー側内部ドライバは、クライアント側ドライバとの一貫性を保ち、同一の機能と拡張機能をサポートします。
アプリケーションまたはアプレット用のJDBCドライバを選択するときには、次の点を考慮します。
一般的に、TCP/IP以外のネットワークのサポートなどのOCI固有の機能が必要でないかぎり、JDBC Thinドライバを使用します。
最大限の移植性とパフォーマンスを実現するには、JDBC Thinドライバを使用します。JDBC Thinドライバを使用すると、アプリケーションとアプレットのどちらからでもOracle Databaseに接続できます。
Secure Sockets Layer(SSL)を介してLightweight Directory Access Protocol(LDAP)を使用する場合は、JDBC Thinドライバを使用します。
Oracleクライアントの環境で使用するクライアント・アプリケーションを作成し、TCP/IP以外のネットワークのサポートなど、OCIドライバ固有の機能が必要な場合は、JDBC OCIドライバを使用します。
アプレットを作成する場合は、JDBC Thinドライバを使用します。
データベース・サーバー内で動作し、リモート・データベースまたは同じデータベース・インスタンス内の別のセッションにアクセスする必要があるコードの場合は、JDBCサーバー側Thinドライバを使用します。
コードがデータベース・サーバー内で動作し、セッション内でローカルにデータにアクセスする必要がある場合は、JDBCサーバー側内部ドライバを使用して、該当するサーバーにアクセスします。
表1-1は、Oracle Database 11gリリース1(11.1)のJDBC OCIドライバまたはJDBC Thinドライバ固有の機能の一覧です。
表1-1 JDBC OCIドライバとJDBC Thinドライバの機能の相違点
JDBC OCIドライバ | JDBC Thinドライバ |
---|---|
OCI接続プーリング |
ネイティブXAのデフォルト・サポート |
透過的アプリケーション・フェイルオーバー(TAF) |
|
OCIクライアント結果キャッシュ |
注意:
|
この項では、次の項目について簡単に説明します。
Oracle Database 11g リリース2(11.2)では、JDBCドライバはすべてJDK 1.5と互換性を持ちます。JDBC ThinドライバとOCIドライバは、JDK 1.6もサポートします。1.5より前のJDKのバージョンはいずれも、もうサポートされていません。JDK 1.5と1.6のサポートは、それぞれojdbc5.jar
ファイルとojdbc6.jar
ファイルによって提供されます。
JDBC OCIドライバは、OCI Cライブラリのコールに、標準Javaネイティブ・インタフェース(JNI)を使用しています。Sun社以外のJava仮想マシン(JVM)、特にMicrosoft社やIBM社のJVMでJDBC OCIドライバを使用できます。
表1-2は、各機能と、3つのOracle JDBCドライバ(サーバー側内部ドライバ、JDBC OCIおよびJDBC Thinドライバ)でその機能のサポートが開始されたバージョンのリストです。
表1-2 機能リスト
機能 | サーバー側内部 | JDBC OCI | JDBC Thin |
---|---|---|---|
JDK 1.0 |
7.2.2 |
7.2.2 |
|
JDBC 1.0.2 |
7.2.2 |
7.2.2 |
|
JDK 1.1.1 |
8.0.6 |
8.0.6 |
|
JDBC 1.22(新機能なし、マイナーな改訂のみ) |
8.0.6 |
8.0.6 |
|
defineColumnType |
8.0.6 |
8.0.6 |
|
行のプリフェッチ |
8.0.6 |
8.0.6 |
|
Oracleバッチ処理 |
8.0.6 |
8.0.6 |
|
Javaネイティブ・インタフェース |
8.1.6 |
||
JDK 1.2 |
9.0.1 |
8.1.6 |
8.1.6 |
JDBC 2.0 SQL3型( |
8.1.5 |
8.1.5 |
8.1.5 |
ネイティブLOB |
8.1.6 |
9.2.0 |
|
索引付き表 |
10.2.0 |
8.1.6 |
10.1.0 |
JDBC 2.0スクロール可能な結果セット |
8.1.6 |
8.1.6 |
8.1.6 |
JDBC 2.0更新可能な結果セット |
8.1.6 |
8.1.6 |
8.1.6 |
JDBC 2.0標準バッチ処理 |
8.1.6 |
8.1.6 |
8.1.6 |
JDBC 2.0接続プーリング |
N/A |
8.1.6 |
8.1.6 |
JDBC 2.0 XA |
8.1.6 |
8.1.6 |
8.1.6 |
サーバー側Thinドライバ |
8.1.6 |
N/A |
N/A |
JDBC 2.0 RowSet |
9.0.1 |
9.0.1 |
|
暗黙的文キャッシュ |
8.1.7 |
8.1.7 |
8.1.7 |
明示的文キャッシュ |
8.1.7 |
8.1.7 |
8.1.7 |
一時LOB |
9.0.1 |
9.0.1 |
9.0.1 |
オブジェクト型の継承 |
9.0.1 |
9.0.1 |
9.0.1 |
マルチ・レベル・コレクション |
9.0.1 |
9.0.1 |
9.0.1 |
|
9.0.1 |
9.0.1 |
9.0.1 |
ネイティブXA |
9.0.1 |
10.1.0 |
|
OCI接続プーリング |
N/A |
9.0.1 |
N/A |
TAF |
N/A |
9.0.1 |
N/A |
NLSサポート |
9.0.1 |
9.0.1 |
9.0.1 |
JDK 1.3 |
9.2.0 |
9.2.0 |
9.2.0 |
JDK 1.4 |
10.1.0 |
9.2.0 |
9.2.0 |
JDBC 3.0セーブポイント |
9.2.0 |
9.2.0 |
9.2.0 |
新規文キャッシュAPI |
9.2.0 |
9.2.0 |
9.2.0 |
ConnectionCacheImpl接続キャッシュ |
N/A |
8.1.7 |
8.1.7 |
暗黙的接続キャッシュ |
N/A |
10.1.0 |
10.1.0 |
高速接続フェイルオーバー |
10.1.0.3 |
10.1.0.3 |
|
接続ラップ |
9.2.0 |
9.2.0 |
|
DMS |
9.2.0 |
9.2.0 |
|
URLのサービス名 |
9.2.0 |
10.2.0 |
|
JDBC 3.0接続プーリング・プロパティ |
N/A |
10.1.0 |
10.1.0 |
JDBC 3.0更新可能なBLOB、CLOB、REF |
10.1.0 |
10.1.0 |
10.1.0 |
JDBC 3.0複数の結果セットのオープン |
10.1.0 |
10.1.0 |
10.1.0 |
JDBC 3.0パラメータ・メタデータ |
10.1.0 |
10.1.0 |
10.1.0 |
JDBC 3.0名前によるストアド・プロシージャ・パラメータの設定/取得 |
10.1.0 |
10.1.0 |
10.1.0 |
JDBC 3.0文プーリング |
10.1.0 |
10.1.0 |
10.1.0 |
名前による文パラメータの設定 |
10.1.0 |
10.1.0 |
10.1.0 |
エンドツーエンドのトレース |
10.1.0 |
10.1.0 |
|
Web RowSet |
11.1 |
10.1.0 |
10.1.0 |
プロキシ認証 |
10.2.0 |
10.1.0 |
|
JDBC 3.0自動生成キー |
10.2.0 |
10.2.0 |
|
JDBC 3.0保持可能カーソル |
10.2.0 |
10.2.0 |
10.2.0 |
JDBC 3.0ローカル・トランザクションとグローバル・トランザクションの切替え |
9.2.0 |
9.2.0 |
9.2.0 |
実行時接続ロード・バランシング |
N/A |
10.2.0 |
10.2.0 |
LOB用の |
10.2.0 |
10.2.0 |
|
XA接続キャッシュ |
N/A |
10.2.0 |
10.2.0 |
DML RETURNING |
10.2.0 |
10.2.0 |
|
JSR 114 RowSet |
10.2.0 |
10.2.0 |
|
SSL暗号化 |
9.2.0 |
10.2.0 |
|
SSL認証 |
9.2.0 |
11.1 |
|
JDK 1.5 |
11.1 |
11.1 |
11.1 |
JDK 1.6 |
11.1 |
11.1 |
|
JDBC 4.0 |
11.1 |
11.1 |
|
AES暗号化 |
11.1 |
||
SHA1ハッシュ |
11.1 |
||
RADIUS認証 |
10.2.0 |
11.1 |
|
Kerberos認証 |
11.1 |
||
ANYDATAおよびANYTYPE型 |
11.1 |
11.1 |
|
ネイティブAQ |
11.1 |
||
データベース変更通知 |
11.1 |
11.1 |
|
データベースの起動と停止 |
N/A |
11.1 |
11.1 |
データ型のファクトリ・メソッド |
11.1 |
11.1 |
11.1 |
バッファ・キャッシュ |
11.1 |
11.1 |
11.1 |
セキュア・ファイル |
11.1 |
11.1 |
11.1 |
診断機能 |
11.1 |
11.1 |
11.1 |
OCIクライアント結果キャッシュ |
11.1.0 |
||
サーバー結果キャッシュ |
11.1 |
11.1.0 |
11.1.0 |
ユニバーサル接続プール |
11.1.0.7.0 |
11.1.0.7.0 |
|
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 |
注意:
|