JDBCによるデータベース・プログラミング

ここではJDBCを使って、 データベース操作をするGUIアプリケーションの作り方をメモっています。

●JDBCとは?
JDBC(Java DataBase Connectivity)(※1) とは、サン・マイクロシステムズ社が提唱している、 Javaプログラムからデータベースに接続する際のプログラム・インターフェース(API) で、その機能はJavaのjava.sqlパッケージで定義されています。 J2SEの他に各RDBMSベンダから提供されるJDBCドライバを入手すれば、 どのベンダのRDBMSにも同じAPIを使って接続できるという利点があります。 Java言語でのデータベース・インターフェースは事実上常にJDBCを使って行う (※2) ことになります。

(※1) サンの現在の公式見解では、JDBCは何かの略語ではなく、 そういう名前の仕様なんだ、ということになっていたと思います。
(※2) 但し、このサイトでご紹介する通り(-_-;)、 JDBCを素で書くのは結構煩雑です。そのため、商用のJ2EEアプリケーションサーバなどには、 JDBCをラップして簡単に書けるクラスライブラリが大抵付属しています。 もっとも、JDBCを知らずに完全にそれらだけで書ける環境というのはなかなかないと思います。

●OracleのJDBCドライバ
JDBCの通信機能自体はJavaのjava.sqlパッケージで提供されていますが、 これとは別に、各RDBMSベンダから提供されるJDBCドライバが必要です。 Oracleの場合はOracle8iからはJDBCは標準コンポーネントとしてRDBMS と一緒についてくるようになっています。 環境変数CLASSPATHに「%ORACLE_HOME%\jdbc\lib\ojdbc14.jar」 と「%ORACLE_HOME%\jdbc\lib\nls_charset12.zip」 を追加すれば使えるようになります。 または、ojdbc14.jarを $JAVA_HOME/jre/lib/ext にもコピーしておけば、 CLASSPATHを通さなくてもOKです。
OracleのJDBCドライバには次の3種類があります(「Oracle JDBC Driver」 という製品セットをインストールすれば全部使えます):

  • OCIドライバ(JDBC Type 2ドライバ)
  • Thinドライバ(JDBC Type 4ドライバ)
  • サーバーサイドドライバ
OCIドライバは、 Oracleの通信ミドルウェアNet8を使ってデータベース接続を行うJDBCドライバです。 クライアントPCに必ずNet8をインストールしておく必要があります。 Thinドライバに比べてアクセス処理が高速なため、JDBCの初期には多用されましたが、 クライアントPCの性能向上に伴ってこのメリットが失われてきたため、 現在はあまり使われていません。
Thinドライバは、データベース接続にNet8を使わず、 純粋Javaで書かれた独自コードで接続を行います。 クライアントPCにNet8をインストールする必要がないため、 現在JavaアプリケーションからOracleに接続する場合には普通このドライバを使います。
サーバーサイドドライバはサンのJDBCでは定義されていないタイプのJDBCドライバで、 オラクルが独自に開発したものです。 これは他の2つと違いクライアント機ではなく、Oracleインスタンスが動いているサーバー側で動作するドライバです。 Oracle Javaストアドプロシージャやサーバー機上で動作するEnterprise JavaBeans(EJB)からOracleに接続する際に使われます。

●SybaseのJDBCドライバ
サイベースのRDBMSには大きく2系統、 Sybase Adaptive Server Enterprise(ASE) と Sybase Adaptive Server Anywhere(ASA)があります。 ASEは旧称 Sybase SQL Serverといえば有名でしょう。 老舗サイベースの純正RDBMSです。一方ASAは、 WATCOM→PowerSoft→Sybaseとベンダが買収された結果サイベースの製品になったもので、 モバイルユースに特化したRDBMSです。
これらのRDBMSに接続するJDBCドライバはSybase jConnect for JDBC と呼ばれ、ASEやASAに付属しているので、 インストールすれば次のように環境変数CLASSPATHを設定するだけで使えるようになります。

SET CLASSPATH=.;C:\Progra~1\Sybase\Shared\jConnect-5_2\classes\jconn2.jar
ここではSybase Adaptive Server Anywhere 7.0.2 (Sybase jConnect 5.2) での動作を確認しています。

●PostgreSQLのJDBCドライバ
オープンソースのRDBMS、PostgreSQLのJDBCドライバのソースプログラムは、 本体のソース配布に同梱されているので、Java2 SDKのjavacコンパイラを使って JDBCドライバをビルドできます。 JDBC 2.0対応のドライバは「make jdbc2」で作ることに注意してください。 ここで使用したPostgreSQLのバージョンは…内緒、内緒です。(すぐ下でばれてるやん)

% cd /home/watasi/postgreql-7.1.3/src/interfaces
% make jdbc2
% make examples2
JARアーカイブpostgresql.jarができればビルドは成功です。 このファイルは、どこに置いても構いません。 $JAVA_HOME/jre/lib/ext に置くか、環境変数CLASSPATHを通せばOKです。

●MySQLのJDBCドライバ
以前はMySQLの代表的なJDBCドライバとして、MM MySQL JDBC Driverが知られていました。 これはWorldServerの配布ページ からダウンロードでき、現在のバージョンは2.0.2です。 mm.mysql-2.0.2-src.jarというJARアーカイブで配布されているので、 コマンドラインからjarコマンドで展開します。

% jar -xf mm.mysql-2.0.2-src.jar
するとmm.mysql-2.0.2というディレクトリができ、その中にmysql.jar があるので、これを環境変数CLASSPATHに通すか、 $JAVA_HOME/jre/lib/ext にコピーします。
そして現在では、MySQLの開発元であるMySQL AB自身がMMドライバを改良・発展させて、 MySQL Connector/Jという新しいドライバにして、 同じく無償で配布しています。 こちらからダウンロードできます。 現在のバージョンは5.14です。

●FirebirdのJDBCドライバ
ボーランドのInterbaseから派生したオープンソースのRDBMS、 FirebirdのJDBCは、 Firebirdの本体と同じ上記のサイトで、 オープンソースとして配布されており、無償で入手できます。 FirebirdSQL-1.0.0RC2.zip をダウンロードして、アーカイバで展開します。 できたディレクトリにあるfirebirdsql.jarを環境変数PATHに通すか、 $JAVA_HOME/jre/lib/ext にコピーします。 また、 環境によっては lib/mini-j2ee.jar も必要になる場合があります。 このへんはサンプルのページに譲ります。

●そもそもPure Java DBの場合は?
Pure Java DBつまり、Javaで書かれたRDBMSとしては、 HSQLDBと、 Apache Derbyがよく知られています。 前者は最大シェアのPure Java DB(といわれています)、 後者はJava6SEの登場時、「Java DB」としてJDKと一緒に配布されるようになったことで有名になりました。
これらはいずれも、本体(プログラム)もJARファイルなので、 通常それらの中にJDBCドライバクラスも含まれています。 つまり、明示的な「JDBCドライバのJARファイル」というものはありません。
それで、これらのPure Java DBへの接続プログラムの作り方は、 RDBMSとしての使い方自身と統合して、 姉妹サイトはくつーるに譲ります。

JDBC and Swing Top

(first uploaded 2000/11/19 last updated 2011/01/10, URANO398)