JDBC(Java DataBase Connectivity)とは

Java
スポンサーリンク

JDBC(Java DataBase Connectivity)とは

JDBC は Java アプリケーションからデータベース間へアクセスするためのインターフェイス(API・仕様)です。

Java アプリケーションからデータベースへは次の順序でアクセスします。

このうち 2~4 を JDBC と呼びます。

  1. Java アプリケーション(SQL クライアントツール、自分で書いたプログラムなど)
  2. JDBC API(JDK 1.1 以降に含まれる)
  3. JDBC ドライバーマネージャー
  4. JDBC ドライバー API
  5. JDBC ドライバー
  6. データベース
スポンサーリンク

JDBC の利点

JDBC を利用すると、Java アプリケーションとデータベースがお互いのことを考えなくて良くなります。

Java アプリケーション目線

  • Java アプリケーション開発者は JDBC API だけを覚えればいい
  • MySQL 用のコードだとか PostgreSQL 用のコードだとか、データベースを意識しなくていい
  • 別のデータベースで使っていたソースコードを使い回せる

JDBC API の主なクラス・インターフェイスは以下のとおりです。

クラス・インターフェイスできること
DriverManagerJDBCドライバを管理するクラス
Connectionデータベースへ接続(セッション)
StatementSQL クエリのリクエスト
ResultSetSQL クエリのレスポンス

例:下記のコードで JDBC ドライバーを提供するすべてのデータベースにアクセスできる。

DriverManager.getConnection(url, user, password);

データベース目線

  • データベース開発者は Java アプリケーションに対しては JDBC Driver だけを作ればいい
  • このアプリの命令だとか、あのアプリの命令だとか、Java アプリケーションを気にしなくていい

以下のように各データベースが JDBC のインターフェイスに従ってドライバーを作っている。

JDBC Driver for MySQL (Connector/J)
https://www.mysql.com/jp/products/connector/
JDBC API に従って MySQL を動かすプログラムと言える。

PostgreSQL JDBC Driver
https://jdbc.postgresql.org/
JDBC API に従って PostgreSQL を動かすプログラムと言える。

スポンサーリンク

【実践】JDBC を利用してデータベースにアクセス

事前準備

下記のデータベースに対して、JDBC ドライバーを使用して Java アプリケーションからアクセスしてみます。

mysql> use test;
Database changed

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | foo  |
|    2 | bar  |
+------+------+
2 rows in set (0.00 sec)

【サンプルコード】JDBC を利用してデータベースへアクセス

  1. sudo yum install mysql-connector-java
  2. vim Connect_MySQL_JDBC.java
    import java.sql.*;
    
        public class Connect_MySQL_JDBC {
                public static void main(String[] args) {
                        try {
                                String url = "jdbc:mysql://localhost/test"; //<jdbc>:<データベース製品名>://<ホスト名>/<データベース名>
                                String user = "root"; //データベースにアクセスする際のユーザー名
                                String password = System.getenv("PASSWORD"); //データベースにログインする際のパスワードに変えてください
                                
                                Class.forName("com.mysql.jdbc.Driver"); //ドライバーの指定
                                Connection conn = DriverManager.getConnection(url, user, password); //データベースへの接続
                                Statement stmt = conn.createStatement(); //ステートメントの作成
                                ResultSet rs = stmt.executeQuery("SELECT * FROM test;"); //ステートメントでSQLを実行
        
                                //SQL実行結果の戻り値    
                                while(rs.next()){
                                    System.out.print(rs.getString("id")+" ");
                                    System.out.println(rs.getString("name"));
                                }
        
                                //使用したリソースの開放
                                rs.close();
                                conn.close();
                        } catch(SQLException e) {
                                e.printStackTrace();
                        } catch(Exception e) {
                                e.printStackTrace();
                        }
                }
        }
  3. JDBC ドライバーのクラスパスを通しながらコンパイル、実行します。

    javac -classpath /usr/share/java/mysql-connector-java.jar Connect_MySQL_JDBC.java
    java -classpath /usr/share/java/mysql-connector-java.jar: Connect_MySQL_JDBC
        1 foo
        2 bar

test データベースの test テーブルに対して SELECT * FROM test; が発行できたことがわかります。

参考資料

Java JDBC API
JDBC (1)

https://www.neclearning.jp/sample_text/JV945-1.pdf

そういえばなんで Java のコネクタだけ JDBCって言うんでしょうね?

Python なら PDBC、 C言語なら CDBC って言いそうな気がするんですが。

0

コメント