この連載では、Javaのデータベース・アクセスAPIである「JDBC」の機能を、サンプルコードを交えて解説していきます。また、J2EEにおけるJDBCの位置付けや、JDBCを利用するさまざまなテクノロジについても解説していく予定です。前提知識としては、Javaとリレーショナル・データベースに関するベーシックな知識があれば十分です。
今回は、JDBCの概要について簡単に触れた後、JDBCのアーキテクチャについて解説します。
JDBCは、一言でいってしまうなら「リレーショナル・データベース(および、ほとんどすべての表形式のデータ)にアクセスするための、標準Java API」です。JDBCは「Java Database Connectivity」の省略だといわれています(が、実はJDBC仕様には明記されていません)。
企業内のクリティカルなデータは、多くの場合リレーショナル・データベースに格納されています。そのため、JDBCは、Javaによるエンタープライズ・アプリケーションの基礎をなす、重要なAPIの1つとなっています。
データベース間の差異を吸収するJDBCドライバと、特定のベンダに依存しない標準APIであるJDBC APIを利用することによって、ポータブルなデータベース・アプリケーションを構築することが可能になります。実行環境のプラットフォームだけではなく、接続するデータベースに対しても中立となるため、Javaの優れた特徴の1つであるWORA (Write Once, Run Anywhere) を、より高い次元で実現できるわけです。
JDBCは、次のようなさまざまなJavaコンポーネントから利用することができます。
初めに、JDBCの歴史について、簡単に振り返っておきましょう。
JDBCは、1996年2月に発表され、1996年12月リリースのJava Development Kit(JDK)1.1(http://java.sun.com/products/jdk/1.1/)には、JDBC 1.x API(java.sql パッケージ)が含まれるようになりました。JDBCは当初から業界に広く受け入れられ、データベース・ベンダやミドルウェア・ベンダは、競ってJDBCドライバを開発してきました。
現在、データベース・アクセスのための基本的な機能は、JDBC 1.2 APIで提供されています。
1998年には、JDBC 2.0 Core API、JDBC 2.0 Optional Package API(旧称JDBC 2.0 Standard Extension API:javax.sql パッケージ)が相次いでリリースされ、1998年12月リリースのJava 2 Platform, Standard Edition (J2SE) 1.2 (http://java.sun.com/products/jdk/1.2/ja/)では、JDBC 2.x Core APIが含まれるようになりました。
1999年6月には、サーバ・サイドJavaアプリケーションに必要な標準API群を規定した、Java 2 Platform, Enterprise Edition(J2EE)1.2(http://java.sun.com/j2ee/)が発表され、JDBC 2.0 Optional Package APIは、J2EEを構成するAPIの1つとなりました(J2EEに関しては、「J2EEの基礎」および「Java Solution FAQ」を参考にしてください)。
JDBC 2.1 Core APIは、JDBC 1.2 APIの後継にあたり、JDBCの基本機能を提供します。一方、JDBC 2.0 Optional Package APIは、接続プーリングや分散トランザクションなど、サーバ・サイドJavaで求められる拡張機能を提供します。JDBC 2.0 APIは、これら2つのAPIの総称です。
JDBC 3.0 APIは、Java Community Process (JCP) によって仕様の策定が進められています。本稿執筆時点では、Proposed Final Draft 3が公開されています。JDBC 3.0 APIでは、基本的なフレームワークはJDBC 2.0 APIを踏襲し、これを完成させることを目的としています。
本稿執筆時点では、ベータリリースであるJ2SE 1.4(http://java.sun.com/j2se/1.4/ja/)にJDBC 3.0 APIが含まれます。
本連載では、JDBC 2.0 APIを前提に解説していきます。初めの数回で、JDBC 1.2 APIから提供されていた基本機能を紹介し、その後で、JDBC 2.0 APIでの新機能を紹介する予定です。
JDBCドライバ・マネージャ(java.sql.DriverManager クラス) は、JavaプログラムとJDBCドライバの間に位置する管理レイヤです。その役割は、利用可能なJDBCドライバを管理し、適切なJDBCドライバを用いてデータベースに接続することです。
JDBCドライバは、実際にデータベースに接続し、その後のデータベース・アクセスを実行する役目を持っています。JDBCドライバ・マネージャがJDBCドライバを管理できるように、JDBCドライバは、JDBC Driver APIのインターフェイスを実装する必要があります。数多くのデータベース・ベンダやミドルウェア・ベンダが、さまざまなJDBCドライバを提供しています。通常のJava開発者は、JDBC APIだけを知っていれば十分であり、JDBC Driver APIを知る必要はありません。
有償あるいは無償で利用可能なJDBCドライバは、次のWebページで検索可能です。
http://industry.java.sun.com/products/jdbc/drivers
JDBCドライバは、その実装方法によって、次の4つのタイプに分けられます。
タイプ | カテゴリ |
---|---|
1 | JDBC-ODBCブリッジ・ドライバ |
2 | ネイティブ・ブリッジ・ドライバ |
3 | ネット・プロトコル・ドライバ |
4 | ネイティブ・プロトコル・ドライバ |
●タイプ1:JDBC-ODBCブリッジ・ドライバ
タイプ1のJDBC-ODBCブリッジ・ドライバ(sun.jdbc.odbc.JdbcOdbcDriverクラス)は、データディレクトテクノロジーズ(http://www.datadirect.co.jp/)とサン・マイクロシステムズが共同開発したドライバであり、J2SEに含まれています。これを使用するには、クライアントにインストールされている既存のODBCドライバが必要です。ODBCブリッジ・ドライバは、JDBC APIと対応するODBC APIをマッピングすることによって、データベースにアクセスします。ODBCドライバのインストールが必要なため、Appletから利用することはできません。
●タイプ2:ネイティブ・ブリッジ・ドライバ
タイプ2のネイティブ・ブリッジ・ドライバは、JDBC APIをデータベース製品固有のネイティブAPIにマッピングして、データベースにアクセスします。これを使用するには、データベース製品固有のクライアント・ライブラリが必要です。タイプ1ドライバと同様に、Appletから利用することはできません。
オラクルの場合は、タイプ2ドライバとしてOCIドライバを提供しています。OracleデータベースのクライアントAPIであるOCI(Oracle Call Interface)を利用するため、Oracleクライアントのインストールが必要です。
タイプ3のネット・プロトコル・ドライバは、ミドルウェア・サーバを介してデータベースにアクセスします。JDBCドライバは、データベースに依存しない中間プロトコルを用いて、ミドルウェア・サーバと通信します。ミドルウェア・サーバは、この中間プロトコルをデータベースのネイティブAPIに変換して、データベースにアクセスすることになります。
JDBCドライバ自体は、ネイティブAPIにアクセスしないため、Javaのみで実装でき、Appletでもダウンロードして利用することができます。
●タイプ3:ネット・プロトコル・ドライバ
タイプ3ドライバは、JDBCドライバでネイティブAPIをサポートする必要がないため、タイプ4ドライバに比べて軽量である点がメリットです。ですが、システム構成が複雑になるというデメリットがあります。
タイプ3ドライバとしては、データディレクトテクノロジーズのSequeLink for JDBC(http://www.datadirect.co.jp/products/index.asp)などがあります。
●タイプ4:ネイティブ・プロトコル・ドライバ
タイプ4のネイティブ・プロトコル・ドライバは、データベース製品固有のネイティブAPIを完全にJavaのみで実装したものです。このため、クライアント・ライブラリをインストールする必要はなく、Appletでもダウンロードして利用することができます。
タイプ4ドライバは、JDBCドライバでネイティブAPIのJava実装を持つため、ほかのタイプのドライバに比べ、サイズが大きくなる傾向があります。ですが、4つのタイプの中で最もシンプルな構成をとれる点は魅力的です。
オラクルの場合は、タイプ4ドライバとして、Thinドライバを提供しています。Thinドライバは、TCP/IP上のNet8通信を実装しており、Oracleデータベースと直接通信することが可能です。
JDBCドライバの選択は難しい問題です。データベース・ベンダが提供するドライバ(多くの場合、無償です)や、サード・パーティの提供する有償のドライバの中から、パフォーマンス、システム構成への適合性、ドライバが提供する付加価値などを考慮して、慎重に選択すべきでしょう(もちろん、JDBCドライバを変更しても、コードをほとんど修正することなく、再利用することはできますが)。
第2回は、JDBCを利用する環境を構築した後、実際にコードを見ながらJDBCの基本機能について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.