コンテンツにスキップ

Java Database Connectivity

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。SnowBot (会話 | 投稿記録) による 2011年8月14日 (日) 11:19個人設定で未設定ならUTC)時点の版 (ロボットによる: 文字置き換え (アプリケーションプログラミングインタフェース))であり、現在の版とは大きく異なる場合があります。

JDBCは、Javaデータベースの接続のためのAPI。JDBCは正式名称であって略称ではないが、Java Database Connectivityを略して名付けられたと考えられている(Java Database Connectionであるとする資料もある)。ODBCをベースにサン・マイクロシステムズおよびDataDirectが共同で開発していると言われている。そのためドライバのデフォルトの自動コミットの有効化など似ている点も多々ある。

JavaにおいてSQLを使用して、データベース管理システム (DBMS) などと接続する機能を標準化(抽象化)している。

元はJDK 1.0の拡張APIという位置付けであったが、JDK 1.1で正式にJavaの基本SDKに同梱されるようになった。標準的な機能 (API) はJava SEに含まれている。JDBCの規格はJava SDKとは独立して行われており、APIのアップデートは随時行われている。

JDBCを利用する為には、100%Pure Java製Apache Derbyが同梱されているJava SE 6を除き、各DBMS用のJDBCドライバを用意する必要があるが現在開発が行われているほとんどのデータベースではJDBCドライバが用意されている。 これらのドライバを管理するのがJDBC Driver Managerである。JDBC Driver Managerは、複数のJDBCドライバを同時に利用する事が可能である。JDBCを使うユーザーは、JDBCドライバをロードし(多くはClass.forName("ドライバクラス名")メソッドを利用して呼び出される。Class.forName("ドライバクラス名")メソッドを利用した場合コンパイラによるそのドライバの依存チェックが行われない為、コンパイル時にドライバをあらかじめ参照できる様に設定しなくて良いなどの利点がある)、JDBC Driver Managerを使ってデータベースドライバを取得し、データベースと接続を行って、データベースアプリケーションを記述する事になる。 また、Javaのオブジェクト指向言語の特性を生かして、JDBCの基本APIに無い機能を各ドライバに同梱する事も可能である。この場合、JDBC APIのスーパーセットのクラスを呼び出すことでこれらの機能を利用可能にすることが可能である。

たとえば、初期のオラクル社Oracle Database (Oracle8) 用JDBCドライバは当時のJDBC APIがBLOB(Binary Large Object Block)、CLOB(Charactor Large Object Block)に対応していなかったため独自に機能拡張し、BLOBとCLOBに対応していた。

JDBC Driverのタイプ

JDBCドライバは4つのタイプにカテゴライズされる。

  1. Type1 Driver JDBC-ODBC ブリッジ JDBCからのクエリー要求を、ODBCを経由して受け渡し、データベースとアクセスするもの。ODBCドライバが必須であり、ハードウェアOSに依存する。Java SEに標準で添付されているドライバでもある。
  2. Type2 Driver Native-API ドライバ JDBCからのクエリー要求を、OS上のDLLや専用ライブラリに受け渡し、そこからデータベースにアクセスするもの。Type1に比べて階層が薄く済むため高速化が期待できる点とTCP/IPに依存しない利点があるが、やはりハードウェアとOSに依存する。OracleでいうとOCIドライバがType2 Driverに相当する。
  3. Type3 Driver 通信プロトコルドライバ JDBCからのクエリー要求をJavaで記述されたのドライバ内で独自のプロトコルに変換し、それをアプリケーションサーバを通じてデータベースにアクセスするもの。機種依存・データベース依存をせずに軽量なドライバが作成可能だが、中間サーバを挟むためにパフォーマンスに問題が起きる。
  4. Type4 Driver ネイティブプロトコルドライバJDBCからのクエリー要求をすべてJava上で処理してしまうもの。Java上にデータベースにアクセスするためのすべての機能を乗せる為、ドライバのサイズが大きくなる、パフォーマンスが若干低下する。基本的にTCP/IPでしか利用できないなどの欠点があるがハードウェアとOSに依存しないため移植性に優れている。OracleでいうとthinドライバがTYPE4ドライバに相当する。

TYPE1、TYPE2はDBMSのDLLファイルやライブラリファイルを呼び出す形となるため、JVMのメモリー管理外となる。TYPE3、TYPE4についてはJVM上でJavaのクラスとして実装されているためJVM上のガベージコレクションの対象となり管理が行いやすく、流れとしてはTYPE4が主流となっている。

Javaとデータベース

後に大規模システム開発において、Javaによるアプリケーションソフトウェア開発が一般的になるきっかけとなったのは、リレーショナルデータベースアクセスをJavaから行う JDBC が発表されてからである。

さらにJavaで大規模エンタープライズシステムを開発するための仕様「Java EE (Java Platform, Enterprise Edition)」には、リレーショナルデータベースの表(テーブル)の行データを、Javaのオブジェクトに1対1に対応させ、オブジェクト内容の永続化=行データの保存というデータのリンクと、オブジェクトのメソッド呼び出し=データベースへのトランザクション処理を同期させる特殊なJava Beanを動作・管理する機構である「EJB (Enterprise JavaBeans)」 の「Entity Bean」が導入された。

EJB2.1までは、オブジェクトーリレーショナルの間にあるインピーダンスミスマッチによりリレーショナルデータベースの機能を十分に生かせないことや性能面の問題があったが、EJB3.0仕様により改善されてきている。

関連項目

外部リンク