
Java アプリケーションから複数のデータベースにアクセスする際、接続方式やプロトコルの違いに悩まされた経験はないでしょうか。JDBC ドライバーは、こうしたデータベースごとの違いを吸収し、Java アプリケーションとデータベース間のアクセスを支える仕組みです。本記事では、JDBC ドライバーの基本的な役割と、Java テクノロジーの普及に大きく貢献してきた背景を解説します。
JDBC ドライバーの仕組みやタイプごとの特色を理解すれば、必要なコンポーネントや使用するAPI・プロトコルを把握できます。その結果、構成やパフォーマンスについて最適な判断がしやすくなるでしょう。あわせて、クラウド時代におけるJDBC の拡張的な使われ方も紹介していきます。
JDBCドライバーとは?
JDBC ドライバーは、Java アプリケーションが各種データベースにアクセスするためのコンポーネントです。Java プログラムからデータベースにアクセスする際に、もしJDBC のような統一仕様がなければ、Java プログラムで異なるデータベースのプロトコルにアクセスするためのプログラムを実装しなければならず、開発や維持の負荷になってしまいます。
Java では、データベースに依存しない標準仕様であるJDBC API が用意されています。そのJDBC ドライバーは、Java アプリケーションからJDBC API を使ってデータベースにアクセスするためのコンポーネントになります。JDBC は「Java Database Connectivity」の略称と言われています。
JDBC は1997年にJava 1.1 の一部として登場した仕様で、当初からデータベース接続の窓口として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 規格(1996年から)よりも歴史が古く、多くのデータベースで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 リクエストに変換されます。オラクルデータベースにアクセスするための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 ドライバーです。また、データベースに直接接続する場合、他のドライバータイプ(タイプ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(人的資本管理)、会計ソリューションを選択して使っています。データがデータベースの外部に分散している場合、組織はタイプ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クエリ結果プレビュー機能も便利です。
外部のデータ連携ツールを採用した企業の中には、それまで30人日かかっていた処理を約6分に短縮した例もあり、エンジニアをコア業務へ集中させる効果が確認されています。
まとめ
この記事ではJDBC の仕組みや、JDBC ドライバーのタイプ、そして考慮すべき点を見てきました。データアクセスの抽象化・標準化は大変重要なテーマです。また同時に柔軟性、スケーラビリティといった要素を満たす必要があります。特にWeb API のアクセスでは、このような統一されたデータアクセスというものの実現が難しく、個別のAPI に対応するコードを書かないといけないと感じている方も多いと思います。CData では、業務で利用できるあらゆるシステムに対し、JDBC API という極めて標準化されたテクノロジーでのアクセス手法を提供します。
JDBC標準で400種類以上のデータに直接アクセス
データベース以外のSaaSにも自前でドライバーを開発するのは大きな負担です。CData JDBCドライバーならType 5として400種類以上のデータソースに標準SQLで直接アクセスできます。
CData JDBCドライバーの30日間無料トライアルを今すぐ始めて、貴社のJavaアプリケーションに最適な接続方法を開発チーム全体でご確認ください。