JDBC
JDBCとは何か
JDBC は Javasoft 社が開発している SQL 文を実行するための Java API で、あらゆ
るJava 実行環境で必須とされる Core API に分類されています。
JDBC API は
Java プログラムからDBサーバへ接続する
SQL 文を組立て、DBサーバで実行させる
DBサーバが処理した結果を取り出す
DBの情報、処理結果に関する情報などを取り出す ためのクラス、メソッド群を提供します。これにより、Java からDBの操作が可能 になります。感覚的に言うと「Visual Basic + ODBC」の組合せでプログラマを作る のに似ています。ただし、データコントロールに相当するものは、JDBC API には用 意されていません。
JDBC APIは「ドライバマネージャ」というものを持っています。これは、異種DB接 続を可能にするため、複数ドライバ接続をサポートするものです。
Java プログラマから見ると JDBC API はインターフェースの定義でしかありませ ん。そのインターフェース経由で呼び出され、実行されるもの(= JDBC ドライバ)が どのようなものかについては規定していません。つまり、実装方法は自由なわけで す。実際に、Applet の一部として Download できるようにするため、全て Java で 書かれたものにすることもできるし、すでに存在するDBアクセスライブラリへの橋 渡しをするため native method を使って実装しているものもあります。
一般的に JDBC は、Java Database Connectivity の略と言われていますが、 JavaSoft の資料には「JDBC は トレードマーク(TM)であって、何かの略語ではな い」と書かれています。実際 JavaSoft のページには「JDBC(tm)」と表記されている 部分もあります。
JDBCの役割
Javaプログラムの開発者に対し、 DBMS(Database Management System) に対し SQL を発行する 結果を受け取り処理を行う ための標準的なインターフェース(API)を提供する。
DBMS (ex. Oracle, Informix, Sybase, SQLServer)による差異は JDBC が吸収してく れるため、DBMS の種別毎にプログラムを開発する必要がなくなる。
開発者にとっても、一度 JDBC をマスターすれば、ターゲット DBMS が代わってもそ れまでに習得した知識は無駄にならず、使いまわしが効くというメリットがある。
さらに、Java 言語で書かれたアプリケーションは、プラットフォームに依存しない から、一度Java と JDBCでプログラムを書けば、(Java実行環境を備えていれば)どこ ででも実行できる...。
はずなんですが、現実にはいろいろな問題があって必ずしもこうなるとは限りませ ん。
より高いレベルのツールを構築するためのインターフェースを提供する JDBC の提供するクラス、メソッドなどは、プリミティブというか低レベルインター フェースというか、プログラマが直接使うにはちょっと...。という感じがします。
以前 Gupta社のSQLWndows(現Centura)でOracleをアクセスするシステムを開発したこ とがありますが、それに比べるとちょっと面倒です。SQLWindows なら考えなくてい いことも、JDBC ではコーディングしなければならないからです。感覚的に言えば Visual Basic で ODBC 経由でDBへアクセスするプログラムの作成と似たような感 じです。
JDBC で実際のアプリケーションを開発するには、JDBC をベースにしたクラス群と か、JDBC をサポートしたツールが必要になるでしょう。例えば、Symantec の Visual Cafe Pro のような製品です。
JDBC の構造
基本的には、以下のような構造になります。
Java Application/Applet
JDBC Driver manager
JDBC Driver
DB Driver
これについて NJK 社の Object Technology Group がとてもわかりやすい資料を公開 していますのでそちらを紹介します。
第1回「Javaによるイントラネット開発」セミナー(平成 9年 1月21日)
プレゼンテーション資料
http://www.njk.co.jp/otg/Ijaho/presen/index.html
上記の構造の中で JDBC Driver manager は JavaSoft から入手できます(JDBC の Dwonload 用ファイルを解凍してインストールする)。
JDBC Driver は現在、いろいろなベンダからリリースされています。その中から接続 するDBの種類、接続形態により選択します。
DB Driver は接続するDBの開発元から入手するのが一般的ですが、独立系のベンダ もあります。
JDBCドライバタイプ
JDBCドライバは以下のように、4つのタイプに分類されます。
ODBC Bridge Driver(TYPE 1)
Native-API Partly-Java Driver(TYPE 2)
Net Protocol All-Java Driver(TYPE 3)
Native Protocol All-Java Driver(TYPE 4)
それぞれの特徴、構造などについては NJK 社の Object Technology Group がとても わかりやすい資料を公開していますのでそちらを紹介します。
JDBC-Driver解説
http://www.njk.co.jp/otg/Ijaho/presen/jdbctype.html
ポイントは、「Applet から JDBC を使う場合には、TYPE 3 または TYPE 4 の JDBC ドライバが必要」だということです(HORB と組み合わせれば TYPE 1 でも可能です が)。このあたりのことは、別項にまとめます。
また、JavaSoft 社のページには、JDBCドライバとそのタイプについてまとめた一覧 表があります。
JDBC(tm) Drivers
http://splash.javasoft.com/jdbc/jdbc.drivers.html
JDBC のバージョン
現在、JavaSoft 社が提供している JDBC には、以下の3種類ものがあります。
JDBC JDK1.1版
JDK 1.1 には JDBC (及び JDBC ODBC-Bridge Driver)が標準で含まれている。
java.math.BigDecimalの精度を除けば、下記のRelease 1.22 と同じ物である。
JDBC Release 1.22
JDK1.0.2のユーザ用のJDBC。これをインストールすることにより、JDK1.0.2 で JDBC が使用可能になる。この Release 1.22 は java.math.BigDecimalの精度が18桁に制 限されているということを除いて、JDK1.1に含まれているものと同じである。
JDBC Release 1.10
JDK 1.1 beta 2に含まれているものに相当する。JDK1.1版、Release 1.22 は、それ 以前のjava.lang.Bignum が java.math.BigDecimal と java.math.BigIntegerクラス の組合わせで置き換えられている。このRelease 1.10 は BigDecimal を使うよう修 正されていないドライバを使う場合のもの。
今後徐々にJDK1.1へ移行することを考えると、Release 1.22/1.10 はそれまでの「つ なぎ」と言えるでしょう。
注意点としては、古い JDBC ドライバは最新の JDBC と組み合わせて使うことができ ない場合があることです。JavaSoft社のページ (http://splash.javasoft.com/jdbc/index.html)には、JDBC 1.1用に書かれたドライ バはJDBC 1.22とはうまく動かない、と書かれています。