Java アプリケーションからデータベースへは次の順序でアクセスします。
このうち 2~4 を JDBC と呼びます。
- Java アプリケーション(SQL クライアントツール、自分で書いたプログラムなど)
- JDBC API(JDK 1.1 以降に含まれる)
- JDBC ドライバーマネージャー
- JDBC ドライバー API
- JDBC ドライバー
- データベース
なお、記事は以下の Java 入門用の記事の初回です。その他の記事は以下をご覧ください。
- 【Java 入門】オブジェクト指向プログラミングの基本用語
- 【Java 入門】ガベージコレクションの仕組みとは
- 【Java 入門】JDBC (Java DataBase Connectivity)
- 【Java 入門】Gradle (ビルド自動化システム)
JDBC の利点
JDBC を利用すると、Java アプリケーションとデータベースがお互いのことを考えなくて良くなります。
Java アプリケーション目線
- Java アプリケーション開発者は JDBC API だけを覚えればいい
- MySQL 用のコードだとか PostgreSQL 用のコードだとか、データベースを意識しなくていい
- 別のデータベースで使っていたソースコードを使い回せる
JDBC API の主なクラス・インターフェイスは以下のとおりです。
クラス・インターフェイス | できること |
---|---|
DriverManager | JDBCドライバを管理するクラス |
Connection | データベースへ接続(セッション) |
Statement | SQL クエリのリクエスト |
ResultSet | SQL クエリのレスポンス |
例:下記のコードで JDBC ドライバーを提供するすべてのデータベースにアクセスできる。
DriverManager.getConnection(url, user, password);
データベース目線
以下のように各データベースが 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 を利用してデータベースへアクセス
- sudo yum install mysql-connector-java
- 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(); } } }
JDBC ドライバーのクラスパスを通しながらコンパイル、実行します。
javac -classpath /usr/share/java/mysql-connector-java.jar Connect_MySQL_JDBC.javajava -classpath /usr/share/java/mysql-connector-java.jar: Connect_MySQL_JDBC1 foo 2 bar
test データベースの test テーブルに対して SELECT * FROM test; が発行できたことがわかります。
参考資料
https://www.neclearning.jp/sample_text/JV945-1.pdf
そういえばなんで Java のコネクタだけ JDBCって言うんでしょうね?
Python なら PDBC、 C言語なら CDBC って言いそうな気がするんですが。