| 目次 | 前項目 | 次項目 | JDBCTM ガイド: はじめましょう |
JDBC を使用すると、SQL 文を実際的には任意のリレーショナルデータベースに送ることが容易になります。すなわち、JDBC APIを使用すると、Sybase データベースにアクセスするためにプログラムを 1 つ作成し、Oracle データベースにアクセスするために別のプログラムを作成し、Informix データベースにアクセスするためにまた別のプログラムを作成するという必要がありません。JDBC API を使用してプログラムを 1 つ作成すれば、そのプログラムが SQL 文を適切なデータベースに送信することができます。その上、Java アプリケーション言語で書かれたアプリケーションを使用すると、異なるプラットフォームで実行する場合にも、異なるアプリケーションを作成する必要がありません。Java と JDBC を組み合わせることにより、プログラマはプログラムを 1 つ作成して、それをどこででも実行することができるようになります。
Java は強固で安全、使いやすく理解しやすい上に、ネットワーク上で自動的にダウンロードできる、データベースアプリケーションのための非常に優れた基盤言語です。必要なのは、Java アプリケーションが異なる多様なデータベースとやり取りするための方法です。JDBC は、これを行うためのメカニズムです。
JDBC は、Java の機能を拡張します。たとえば、Java や JDBC API では、リモートデータベースから取得した情報を使用するアプレットが入った web ページを発行することができます。また、企業は JDBC を使用して、社員全員をイントラネット経由で 1 つ以上の内部データベースに接続することができます (Windows,、Macintosh、および UNIX マシンが混在している場合でも同様です)。Java 言語を使用するプログラマが増加するにつれて、Java からデータベースに容易にアクセスする必要が増え続けています。
Java と JDBC を組み合わせると、情報の配布が容易かつ経済的になるので、MIS マネージャは Java と JDBC の組み合わせを好みます。企業は自社ですでにインストール済みのデータベースを引き続き使用しながら、異なるデータベース管理システムに格納されている場合でも、その情報に容易にアクセスすることができます。新規アプリケーションの開発時間も短縮されます。インストレーションとバージョン制御は大幅に簡素化されます。プログラマはアプリケーションを作成し、またはそれを 1 度更新してサーバーに置くだけで、誰もが最新バージョンにアクセスできるようになります。また、情報サービスを販売する企業にとって、Java および JDBC は、外部のカスタマに最新情報を配布するよりよい方法を提供します。
以下のコードの一部分は、これらの 3 つのステップの簡単な例を示します。
Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = getInt("a"); String s = getString("b"); float f = getFloat("c"); }
答えは、ODBC を Java から使用することは可能ですが、この後で説明するJDBC-ODBC ブリッジの形で JDBC の力を借りて行うのが最良の方法なのです。そこで次に出てくる質問は、「なぜ JDBC が必要なのか?」です。この質問に対しては、以下のようにいくつかの答えがあります。
最近、Microsoftは、RDO、ADO、および OLE DBという、ODBC を超える新規の API を発表しました。これらの設計は、JDBC と多くの点において同じ方向、すなわち、ODBC 上に実装可能なクラスを基礎としたオブジェクト指向データベースインタフェースへと移行しています。しかし、特に ODBC 市場が成熟していることを考えると、これらのインタフェースのいずれにも ODBC に代わる基礎となるような魅力的な機能は見られません。これらはほとんど ODBC の上に薄い化粧板を貼ったようなものです。しかしながら、これらは JDBC が最初のリリースから発展する余地がないという意味ではありません。ほとんどの新機能は、前の節で述べたオブジェクト / リレーショナルマッピングおよび埋め込み SQL のような上位 API に属するという感じがします。
2 層モデルでは、Java アプレットまたはアプリケーションはデータベースと直接やり取りします。これには、アクセスしている特定のデータベース管理システムとやり取りできる JDBC ドライバが必要です。ユーザの SQL 文はデータベースに配信され、それらの文の結果がユーザに送り返されます。データベースは、ユーザがネットワーク経由で接続されている他のマシンに置くことも可能です。これは、クライアント / サーバ構成と呼ばれ、ユーザのマシンがクライアント、データベースを持つマシンがサーバと呼ばれます。ネットワークは、たとえば社内で社員を接続するイントラネットでも、インターネットでも構いません。
3 層モデルでは、コマンドがサービスの「中間層」に送信され、中間層が SQL 文を データベースに送信します。データベースは SQL 文を処理して結果を中間層に送り返し、中間層がそれをユーザに送ります。3 層モデルでは中間層が企業データに対して行えるアクセスおよび更新の種類について制御を維持することができるので、MIS の責任者はこのモデルを非常に魅力的だと考えています。その他の利点として、中間層があると、中間層によって適切な下位呼び出しに翻訳された使いやすい上位 API を利用することができます。最後に、多くの場合、3 層アーキテクチャの方がパフォーマンス上の利点があります。
現在までのところ、中間層は通常 C または C++ のような高速なパフォーマンスを提供する言語で作成されてきました。しかし、Java バイトコードを効率的なマシン固有コードに翻訳する最適化コンパイラが導入されて、Java に中間層を実装することが現実的になっています。これは大きな進歩で、Java の強固さ、マルチスレッド処理、およびセキュリティ機能を利用できるようになります。JDBC は、Java の中間層からのデータベースアクセスを可能にするのに重要です。
JDBC API がこの問題に対処する 1 つの方法は、すべてのクエリー文字列を基盤の DBMS ドライバに渡せるようにすることです。すなわち、アプリケーションは、望む限りの SQL 機能を自由に使用することができますが、DBMS からエラーを受け取る危険があります。実際、アプリケーションのクエリーは SQL である必要すらなく、特定の DBMS のために設計された SQL の特別な形式 (たとえば、ドキュメントまたは画像クエリー) でも構いません。
JDBC が SQL の適合性の問題に対処する 2 番目の方法は、4.1.5「文オブジェクト内の SQL エスケープ構文」で説明する ODBC スタイルのエスケープ節を使用することです。
エスケープ構文は、標準の JDBC 構文に、より一般的に利用される SQL の拡張機能をいくつか提供します。たとえば、日付リテラルやストアードプロシージャ呼び出しのためのエスケープがあります。
複雑なアプリケーションでは、JDBC が 3 番目の方法で SQL の適合性に対処します。JDBC は、アプリケーションが各 DBMS の必要条件や機能に適合するように、DatabaseMetaData インタフェースを使用して、DBMS についての記述情報を提供します。
JDBC API は、上位データベースアクセスツールおよび API を開発するための基本 API として使用されるので、ここでもその上に構築されるものについての適合性の問題に対処する必要があります。ユーザが頼ることができる標準レベルの機能性を設定するために、"JDBC COMPLIANTTM" という指定が作成されました。この指定を使用するためには、ドライバが最低 ANSI SQL-2 エントリレベルをサポートする必要があります (ANSI SQL-2 は、1992 年に American National Standards Institute が採用した標準を指します)。ドライバ開発者は、JDBC API に付属のテストスイートを使用して、自分が開発したドライバがこの標準に適合することを確認できます。
"JDBC COMPLIANTTM" 指定は、ベンダの JDBC 実装が JavaSoft の提供する適合性テストに合格したことを示します。この適合性テストは、JDBC API に定義されたすべてのクラスとメソッドが存在することを確認し、および SQL エントリレベル機能が使用可能であることをできる限り確認します。このテストは、当然のことながら完璧なものではなく、JavaSoft は現在、ベンダの実装を認定することはしていませんが、この適合性定義により、JDBC の実装にある程度の信頼が与えられます。JDBC API がデータベースベンダ、接続性ベンダ、インターネットサービスベンダ、およびアプリケーション作成者にますます広く受け入れられるにつれて、JDBC は早くも Java データベースアクセスの標準となりつつあります。
http://www.javasoft.com/products/jdbc
JDBC ドライバマネージャは、JDBC アーキテクチャのバックボーンです。これは実際は非常に小さくて簡単です。その主な機能は、Java アプリケーションを正しい JDBC ドライバに接続し、またそれを取り除くことです。
JDBC ドライバテストスイートにより、JDBC ドライバがあるプログラムを実行することがある程度信頼できます。JDBC ドライバテストスイートに合格したドライバだけが、JDBC COMPLIANTTM として指定されます。
JDBC-ODBC ブリッジにより、ODBC ドライバを JDBC ドライバとして使用できます。これは、JDBC をすぐに使用できるようにするための方法として実装され、将来的には、あまり一般的でない DBMS に JDBC ドライバが実装されていない場合は、その一部にアクセスする方法も提供することでしょう。
| ドライバのカテゴリ | すべて JAVA か? | ネットプロトコル |
|---|---|---|
| 1 - JDBC-OCBC ブリッジ | いいえ | 直接 |
| 2 - 基本的にネイティブ API | いいえ | 直接 |
| 3 - JDBC ネット | はい | コネクタが必要 |
| 4 - 基本的にネイティブプロトコル | はい | 直接 |
ドライバについての情報を取得するには、 http://www.javasoft.com/products/jdbc の JDBC の web ページを参照してください。カテゴリ 3 のドライバが用意できる最初のベンダは、SCO、Open Horizon、Visigenic、および WebLogic です。JavaSoft および主要なデータベース接続ベンダである Intersolv は、協力してJDBC-ODBC ブリッジと JDBC ドライバテストスイートの開発にあたっています。