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ドライバおよびJDBC 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は、APIの1つであり、第三世代言語のネイティブ・プロシージャやファンクション・コールを使用して、Oracle Databaseにアクセスし、SQL文の処理のすべての段階を制御するアプリケーションを作成できます。
JDBCサーバー側Thinドライバ
JDBCサーバー側Thinドライバは、クライアント側で実行されるJDBC Thinドライバと同じ機能を提供します。ただし、Oracle Databaseの内部で実行され、リモート・データベース、または同じデータベースの別セッションにアクセスします。
このドライバは、次の場合に役立ちます。
中間層として動作するOracle Databaseインスタンスからリモートのデータベース・サーバーにアクセスする場合
Javaストアド・プロシージャなどのOracle Databaseセッションの内部から別のOracle Databaseセッションにアクセスする場合
JDBC Thinドライバをクライアント・アプリケーションから使用する場合とサーバーの内部から使用する場合で、コード上の違いはありません。
JDBCサーバー側内部ドライバ
JDBCサーバー側内部ドライバは、Javaストアド・プロシージャなど、Oracle Databaseの内部で実行され、同じデータベースにアクセスする必要がある、あらゆるJavaコードをサポートします。このドライバにより、Java Virtual Machine(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リリース1(11.1)では、どのJDBCドライバもJDK 1.5に準拠しています。また、JDBC ThinドライバとJDBC OCIドライバでは、JDK 1.6をサポートしています。1.5より前のJDKのバージョンはすべて、もうサポートされていません。JDK 1.5と1.6のサポートは、それぞれojdbc5.jar
ファイルとojdbc6.jar
ファイルによって提供されます。
JDBC OCIドライバは、OCI Cライブラリのコールに、標準Javaネイティブ・インタフェース(JNI)を使用しています。Sun社以外の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 |
oracle.jdbcインタフェース |
9.0.1 |
9.0.1 |
9.0.1 |
ネイティブXA |
9.0.1 |
10.1.0 |
|
OCI接続プーリング |
N/A |
9.0.1 |
N/A |
OCIクライアント結果キャッシュ |
11.1.0 |
||
サーバー結果キャッシュ |
11.1.0 |
11.1.0 |
|
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.2.0 |
10.2.0 |
10.2.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 |
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リターニング |
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 |
|
RADIUS認証 |
10.2.0 |
||
JDK 1.5 |
10.2 |
10.2 |
10.2 |
JDK 1.6 |
11.1 |
11.1 |
|
JDBC 4.0 |
11.1 |
11.1 |
11.1 |
データベースの起動と停止 |
N/A |
11.1 |
11.1 |
Streams AQに対するJavaインタフェース |
11.1 |
注意:
|