Java Database Connectivity

Java Database ConnectivityJava JDBC API (JDBC)は、 と関係データベースの接続のためのAPI。ODBCをベースにサン・マイクロシステムズおよび  が共同で開発していると言われている。そのためドライバのデフォルトの自動コミットの有効化など似ている点も多々ある。

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

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

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

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

 JDBCドライバのタイプ 
JDBCドライバは4つのタイプに分類されている。

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

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

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

さらに  で大規模エンタープライズシステムを開発するための仕様「」には、関係データベースの表（テーブル）の行データを、 のオブジェクトに1対1に対応させ、オブジェクト内容の永続化＝行データの保存というデータのリンクと、オブジェクトのメソッド呼び出し＝データベースへのトランザクション処理を同期させる特殊な  を動作・管理する機構である「エンタープライズ  ビーンズ｣ の「エンティティ・ビーン」が導入された。

EJB 2.1までは、オブジェクト-関係の間にあるインピーダンスミスマッチにより関係データベースの機能を十分に生かせないことや性能面の問題があったが、EJB 3.0以後の仕様により改善されてきている。

EJB 3.2で「エンティティ・ビーン」が廃止され、Java SE および Java EE（現・Jakarta EE）共通向けの、独立した永続化フレームワークJava Persistence API (JPA) に進化した。

 JDBCドライバの供給元 
 オラクルは、JDBC ドライバと供給元のリスト を提供している。
 Simba Technologies は、外部データソースのカスタム JDBC ドライバを開発できる SDK を出荷している。
 CData Software は、様々なアプリケーション、データベース、Web API のタイプ4の JDBC ドライバを出荷している。

脚注

 関連項目 
Java Transaction API

 外部リンク 

 JDBC

Category:データベース
Category:Java
Category:Java API