
Java アプリケーションから複数のデータベースにアクセスする際、接続方式やプロトコルの違いに悩まされた経験はないでしょうか。JDBC ドライバーは、こうしたデータベースごとの違いを吸収し、Java アプリケーションとデータベース間のアクセスを支える仕組みです。本記事では、JDBC ドライバーの基本的な役割と、Java テクノロジーの普及に大きく貢献してきた背景を解説します。
JDBC ドライバーの仕組みやタイプごとの特色を理解すれば、必要なコンポーネントや使用するAPI・プロトコルを把握できます。その結果、構成やパフォーマンスについて最適な判断がしやすくなるでしょう。あわせて、クラウド時代におけるJDBC の拡張的な使われ方も紹介していきます。
JDBCとは?
JDBC(Java Database Connectivity)とは、Java プログラムから様々な種類のデータベースへ、共通の手順でアクセスするためのAPI 仕様です。1997年にJava 1.1 の一部として登場し、Windows 環境の標準的なデータベース接続規格であるODBC(Open Database Connectivity)の考え方を踏襲しつつ、Java 向けに標準化されました。
JDBC の実体は、java.sql パッケージが提供する一連のインタフェースとクラス(DriverManager、Connection、Statement など)です。Java アプリケーションはこれらの標準API だけを呼び出せばよく、接続先データベースごとの通信方式の違いを意識する必要がありません。
ただし、JDBC はあくまで「仕様」であり、実際にデータベースと通信する処理そのものは実装しません。その実装を担うのが、本記事のテーマである「JDBC ドライバー」です。つまり、JDBC(仕様)とJDBC ドライバー(実装)は、以下のような4 層の関係で結ばれています。

Java アプリケーション(開発者が作成するプログラム)
JDBC API(java.sql パッケージ。仕様であり実装は持たない)
JDBC ドライバー(データベースベンダーやCData などが提供する実装)
データベース(またはSaaS・ファイルなどの接続先データソース)
この4 層構造により、Java アプリケーション側のコードを変更することなく、接続先データベースを切り替えたり、複数のデータベースを同じ手順で扱ったりできるようになります。
JDBCドライバーとは?
前章で見たとおり、JDBC という仕様の実装を担うのがJDBC ドライバーです。データベース接続の窓口となるのはjava.sql.DriverManagerクラスで、アプリケーションはDriverManager.getConnection()を呼び出すだけで、背後にあるJDBC ドライバーの実装差を意識せずにデータベースへ接続できます。

Java API という抽象化された標準データ接続技術により、Java アプリケーションとして接続データベースや実行プラットフォームに依存しないWORA(Write Once, Run Anywhere)というJava のメリットを享受できます。
JDBC ドライバーには複数のタイプがあります。使用するプロトコルや間に入るコンポーネントの違いにより以下のように分類されます。
Type 1: JDBC-ODBC Bridge ドライバー
Type 2: Native API ドライバー
Type 3: Net Protocol ドライバー
Type 4: Pure Java ドライバーまたはThin ドライバー
Type 5: Custom ドライバー
ここからは各タイプの特徴を見ていきましょう。
JDBCドライバーの5つのタイプとは?
Type | 実装方式 | ネイティブライブラリ | パフォーマンス | 代表的な用途 |
|---|
Type 1 | JDBC-ODBC Bridge | 必要(ODBC) | 低い | レガシーDB・Access接続 |
Type 2 | Native API | 必要 | 中〜高 | Oracle・SAP等の高速処理 |
Type 3 | Net Protocol(ミドルウェア経由) | 不要 | 中 | 複数DB・複数SaaSの集約アクセス |
Type 4 | Pure Java / Thin | 不要 | 高い | 現在最も主流の直接接続 |
Type 5 | Custom(データベース以外のソースにも対応) | 不要 | 高い | CData JDBC ドライバーのようなSaaS/クラウドデータ接続 |
Type 1: JDBC-ODBC Bridge ドライバー
Type 1 JDBC ドライバーは、JDBC-ODBC ブリッジとして機能します。主にWindows OS でのデータアクセス標準として使われてきているODBC API にJava アプリケーションからアクセスするためのドライバーです。これはODBC 規格が1992年とJDBC 規格(1997年から)よりも歴史が古く、多くのデータベースでODBC ドライバーが用意されていたこともあり、このようなODBC を前提にした仕様となっています。JDBC-ODBC Bridge ドライバーを使えば、Java アプリケーションからJDBC API を使ってODBC ドライバー経由でデータベースにアクセスできます。
今では主要なデータベースではJDBC ドライバーが提供されているので、JDBC-ODBC Bridge ドライバーの利用は少なくなっています。今でもODBC での接続しかできないレガシーのデータベースやAccess などへのJava からの接続に使われています(Java 8 以降では、同梱されなくなっています)。考慮すべき点としては、ODBC API・Windows OS のODBC Manager に依存する構成になるので、Windows OS に実行環境が限定されます。また、Java API-ODBC API-Native Protocol とプロトコル変換回数が多いので、パフォーマンスには要注意です。ODBC 自体の仕組みや実践的な使い方については、ODBCドライバーとは?すぐ分かる仕組みと実践ガイドで詳しく解説していますので、あわせてご覧ください。

Type 2: Native API ドライバー
Type 2 JDBC ドライバーは、ネイティブAPI ドライバーもしくは、Partial Java ドライバーとも呼ばれます。このタイプでは、データベースのクライアントであるJava アプリケーションにデータベース固有のネイティブデータベースクライアントライブラリを配置し、そのデータベースクライアントライブラリを通じてデータベースにアクセスします。Java からの呼び出しは、データベース固有のNative API リクエストに変換されます。Oracle はオラクルデータベースにアクセスするためのOCI(Oracle Call Interface)を提供しており、これを使う方法がType 2 です。クライアントライブラリを実行環境にすべて配置する必要がある点は、あらかじめ考慮しておきたいところです。逆にクライアントライブラリが特定の環境にのみインストール可能な場合などは実行環境の制約となります。

Type 3: Net Protocol ドライバー
Type 3 JDBC ドライバーは、ミドルウェアまたはネットプロトコルドライバーと呼ばれます。データベースの前に特定のミドルウェアが存在し、Java アプリケーションからは、ネットワーク固有のプロトコルを使用してデータアクセスを行います。クエリを受けたミドルウェアは、固有のネットワークプロトコルをネイティブAPI に変換してデータベースにクエリします。
特徴としては、Java アプリケーション側がピュアJava となるため実行環境に制限がないこと、そして接続先データベースの種類が増えてもJava アプリケーション側にドライバー追加などの負荷がないことです。柔軟性とスケーラビリティを両立できる構成です。また、データベース側が特定のミドルウェア以外からのネイティブAPI アクセスを許容していない場合などにも活用できます。

Type 4: Pure Java ドライバーまたはThin ドライバー
Type 4 JDBC ドライバーは、特定のクライアントのインストールや構成を必要とせずに、JDBC ドライバーがソースデータベースと直接通信します(そのため「thin」と呼ばれています)。現在では、このType 4 JDBC ドライバーが最も主流で、多くのJava アプリケーションからデータベースとハイパフォーマンスで直接通信するために使用されます。ピュアJava のため、実行環境を問わず、シンプルで高い柔軟性を持ちます。
そして間に入るプロトコル変換が少なく、ハイパフォーマンスなデータベースアクセスを実現できます。データベースサーバーへの直接アクセスを必要とするため、セキュリティやネットワーク接続に厳しい懸念がある場合には最適なオプションとは言えない場合があります。

Type 4 ドライバーを使った接続処理は、以下のようにシンプルなコードで記述できます。
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb", "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM customers");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
Type 5: Custom ドライバー
Type 5 JDBC ドライバーは、クライアントのインストールを必要とせずにデータソースと直接通信するという点で、Type 4 JDBC ドライバーと同じです。今日では、Java アプリケーションがアクセスしたいデータはデータベースだけではありません。SaaS(Software-as-a-Service サービスとしてのソフトウェア)アプリケーション、フラットファイルストア、非リレーショナルNoSQL やビッグデータストアなど、多様なソースへの接続が求められています。これらにJDBC 規格でアクセスするドライバーが、Type 5 JDBC ドライバーです。また、データベースに直接接続する場合、他のドライバータイプ(Type 4 を含む)とは一線を画す高度な機能と改善されたパフォーマンスが備わっています。
Type 5 ドライバーは、データベースベンダーから提供される既成のJDBC ドライバーがシステムのニーズを満たさない場合、もしくはSaaS などのようにベンダーからJDBC ドライバーが提供されていない場合に採用されます。しかし、ドライバーを社内で構築すると、多大な開発コストおよびメンテナンスコストが発生する可能性があります。

JDBCドライバーの活用例は?
Type 1: JDBC-ODBC Bridge ドライバー
企業内でODBC 接続しか接続ができないデータベースがある場合、Java アプリケーションからのアクセスにはJDBC-ODBC Bridge ドライバーが必要です。CData では、CData JDBC-ODBC Bridge ドライバー を提供しています。Java 8 以降にはJDBC-ODBC Bridge の同梱がなくなったので、必要な際にはぜひ、CData の商用サポート付きのJDBC-ODBC Bridge ドライバーをお使いください。
Type 2: Native API ドライバー
金融取引企業やリアルタイム分析を行う企業など、大量データを迅速に処理する必要がある組織では、Type 2 JDBC ドライバーが使用されることがよくあります。CData JDBC ドライバーfor Oracle は、SSH 接続などの機能を強化したType 5 ドライバーですが、データベースのクライアントライブラリであるOCI のインストールが必要なことから、典型的なType 2 JDBC ドライバーの形で提供をしています。非データベースをソースとするSAP 向けのCData JDBC ドライバーfor SAP は、SAP のRFC API に対応するSAP ライブラリを使用する必要があり、Type 2 ドライバーの形になっています。
Type 3: Net Protocol ドライバー
Type 3 ドライバーの利点は、何といってもアプリケーション側はデータアクセスモジュールに至るまでロジック変更をせずにデータベース接続の大規模なプールを管理できる点です。また、セキュリティの観点から、Java アプリケーションからデータベースのネイティブAPI での接続を制限するケースも見られます。例えば、クラウド環境のJava アプリケーションなどからオンプレミスのデータベースアクセスには、ネイティブAPI ではなく、セキュアなREST API でのアクセスの方がメジャーでしょう。
しかし、REST API のためにJava アプリケーション側でJDBC API ではないデータアクセスを実施することにデメリットを感じる場合は、CData API Server をデータアクセスのミドルウェアとしてデータベース側に立てます。Java アプリケーション側は、API Server のプロトコルであるOData(REST API)をJDBC に変換するドライバーを用いるだけで、API Server に対してアクセスできます。この変換を担うドライバーの具体的な設定手順は、API Driver for JDBC の使い方で画面付きで紹介しています。

複数のSaaS にアクセスするようなJava アプリケーションの場合でも、Type 3 的な構成を用いることが可能です。CData Connect AI は、100を超えるSaaS データに対するデータアクセスを仮想化してくれるミドルウェアとして機能します。この構成ではJava アプリケーション側はJDBC ドライバーを含めて全くモジュールを追加することなく、複数のSaaS データへの接続ができ、拡張性が高くフレキシブルです。

Type 4: Pure Java / Thin ドライバー
Type 4 ドライバーの特徴は、その「薄さ」、つまり外部ライブラリや複雑なミドルウェアアプリケーションなしで動作する点です。個々のサービス間に依存性を持たせないというモダンなアーキテクチャに最もフィットするものです。DBeaver のようなSQL クライアントツールからCData JDBC Driver で直接データソースに接続する手順は、DBeaverでCData JDBC Driverを使う方法で紹介しています。
Type 5: Custom ドライバー
従来、データはデータベースに保存されてきましたが、今では企業データの多くはビジネスオペレーションのためのクラウドサービスの中に格納されています。企業は、それぞれの目標に最適なCRM(顧客関係管理)、ERP(エンタープライズリソースプランニング)、HCM(人的資本管理)、会計ソリューションを選択して使っています。データがデータベースの外部に分散している場合、組織はType 5 ドライバーを使用して、データがどこにあってもSQL でデータにアクセスできるようになります。
CData JDBC ドライバーは、400種類以上のデータソースにJDBC ベースのSQL アクセスを実現しています。今まで使ってきたシステム資産(Java カスタムアプリケーション、BI、アナリティクス、レポーティングツールなど)を置き換える必要はありません。使用するデータソースに対応するJDBC ドライバーを配置するだけで、新しいクラウドデータソースを既存の企業アプリケーションに連携できます。
CData JDBCドライバーとは?
CData JDBC ドライバーは、JDBC ドライバーとしてレガシーから最新のユースケースまでをサポートします:
圧倒的なパフォーマンス:スピードと効率が最適化され、高性能なデータアクセスを実現します。
標準ベースのアクセス:JDBC 標準に準拠し、幅広いツールやプラットフォームとの互換性を実現します。
400種類以上のデータソース対応:SaaS アプリケーション、NoSQL データソース、ビッグデータストア、RDBMS を広範にサポートします。
シンプルなJDBC / SQL アクセス:使いやすいインターフェースにより、あらゆるBI、レポーティング、ETL ツール、カスタムアプリケーションでのデータ統合をシンプルに実現します。
実際の接続設定や基本的な使い方を具体例で確認したい方は、CData JDBC Driver の基本的な使い方:SharePointも参考になります。開発時にクエリ結果をGUIで確認しながら進めたい場合は、CData ODBC・JDBCドライバーのSQLクエリ結果プレビュー機能も便利です。
外部のデータ連携ツールを採用した企業では、これまで手作業やカスタム実装に頼っていたデータ連携処理を大幅に効率化し、エンジニアをコア業務へ集中させる効果が報告されています。
まとめ
この記事ではJDBC の仕組みや、JDBC ドライバーのタイプ、そして考慮すべき点を見てきました。データアクセスの抽象化・標準化は大変重要なテーマです。また同時に柔軟性、スケーラビリティといった要素を満たす必要があります。特にWeb API のアクセスでは、このような統一されたデータアクセスというものの実現が難しく、個別のAPI に対応するコードを書かないといけないと感じている方も多いと思います。CData では、業務で利用できるあらゆるシステムに対し、JDBC API という極めて標準化されたテクノロジーでのアクセス手法を提供します。
JDBC標準で400種類以上のデータに直接アクセス
データベース以外のSaaSにも自前でドライバーを開発するのは大きな負担です。CData JDBCドライバーならType 5として400種類以上のデータソースに標準SQLで直接アクセスできます。
CData JDBCドライバーの30日間無料トライアルを今すぐ始めて、貴社のJavaアプリケーションに最適な接続方法を開発チーム全体でご確認ください。