ヘッダーをスキップ
Oracle® Database JDBC開発者ガイド
12cリリース1 (12.1)
B71308-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

1 JDBCの概要

Java Database Connectivity(JDBC)は、Javaからリレーショナル・データベースに接続するためのインタフェースを提供するJava標準です。JDBC標準は定義済で、標準のjava.sqlインタフェースを介して実装されます。このため、各プロバイダは独自のJDBCドライバで標準を実装および拡張できます。JDBCは、X/Open SQLコール・レベル・インタフェース(CLI)に基づいています。JDBC 4.0では、SQL 2003標準を使用してコンパイルします。

この章では、JDBCのOracle実装の概要を説明します。内容は次のとおりです。

Oracle JDBCドライバの概要

Oracleドライバは、標準JDBC Application Program Interface(API)をサポートする他、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サーバー側内部ドライバは、クライアント側ドライバとの一貫性を保ち、同一の機能と拡張機能をサポートします。

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

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

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

この項の内容は次のとおりです。

適切なドライバの選択

アプリケーションまたはアプレット用の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サーバー側内部ドライバを使用して、該当するサーバーにアクセスします。

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

表1-1は、Oracle Database 12cリリース1 (12.1)のJDBC OCIドライバまたはJDBC Thinドライバ固有の機能の一覧です。

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

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

OCI接続プーリング



ネイティブXAのデフォルト・サポート

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


OCIクライアント結果キャッシュ



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


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


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


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

oraaccess.xml構成ファイル設定



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


連続問合せ通知


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


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



注意:

  • OCIの最適化フェッチおよびクライアント側オブジェクト・キャッシュの機能は、JDBC OCIドライバの内部機能であり、JDBC Thinドライバには適用されません。

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


環境およびサポート

この項では、次の項目について簡単に説明します。

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

Oracle Database 12cリリース1 (12.1)では、JDBCドライバはすべてJDK 6.0と互換性を持ちます。JDBC ThinドライバとOCIドライバは、JDK 6もサポートします。6.0より前のJDKのバージョンはいずれも、もうサポートされていません。JDK 6.0とJDK 7のサポートは、それぞれojdbc6.jarファイルとojdbc7.jarファイルによって提供されます。

JNI環境およびJava環境

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

JDBCとIDE

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

機能リスト

表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脚注 1 


8.0.6

8.0.6

行のプリフェッチ


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型(BLOBCLOBStructArrayREF)

8.1.5

8.1.5

8.1.5

ネイティブLOB


8.1.6

9.2.0

連想配列脚注 2 

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

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用のsetXXXおよびgetXXXの拡張


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 5.0

11.1

11.1

11.1

JDK 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

データベースの起動と停止

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

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



12.1

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



12.1

SQL文変換



12.1

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


12.1

12.1

最新JDBC標準のサポート


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



脚注 1  Oracle Database 12cリリース1 (12.1)以降、このメソッドのバリアントのほとんどは非推奨です。LOBからLONGへの変換を実行し、LOBプリフェッチ・サイズを構成できるのは、現在のバージョンのみです。

脚注 2 連想配列は、以前は索引付き表と呼ばれていました。


注意:

  • この表で、N/Aは、対応するOracle JDBCドライバにその機能が当てはまらないことを示します。

  • ConnectionCacheImpl接続キャッシュ機能はOracle Database 10g以降、非推奨となりました。

  • 暗黙的接続キャッシュは今回のリリースからサポートが終了しました。