JDBCの概要と使い方


JDBC (Java DataBase Connectivity)とは

Javaアプリケーションとリレーショナルデータベースをつなげるもの (API)。

特徴

  • 様々なデータベースへのポータブルなアクセスを提供する 異なるデータベースごとにコードを書く必要がない
  • Call Level Interface ANSI SQL 2003 をサポートしている
  • カスタムのSQLステートメントをビルドできる
    • select, insert, update, delete
    • inner / outer join
    • ストアドプロシージャをコールする

サポートしているデータベース

JDBC Industry Support

JDBCのアーキテクチャー

  • JDBCドライバー
    • データベースへの接続を提供する
    • JDBCのコールを特定のデータベース用に変換する
  • JDBCドライバーの実装
    • データベースのベンダーによって供給される

JDBCドライバーマネージャー

  • データーベースコネクションストリングに基づいたアプリケーションの接続を助ける

JDBC API

JDBCのAPIは次のパッケージで定義される

java.sql

// と

javax.sql

キーとなるクラス

  • java.sql.DriverManager
  • java.sql.Connection
  • java.sql.Statement
  • java.sql.ResultSet
  • javax.sql.DataSource (コネクションプーリングのために)

開発プロセス

  1. データベースへ接続する
  2. ステートメントオブジェクトを作成する
  3. SQLクエリを実行する
  4. リザルトセットを処理する

1. データベースへ接続する

データベースに接続するために、JDBCのURLのフォームが必要

jdbc:<ドライバーのプロトコル>:<ドライバーコネクションの詳細>

import java.sql*;

...
String dbUrl = "jdbc:mysql://localhost:3306/demo"; // データベースのURL
String user = "student"; // ユーザー名
String pass = "student"; // パスワード

Connection myConn = DriverManger.getConnection(dbUrl, user, pass); // データベースへの接続

データベースへの接続に失敗したら例外が投げられます。

java.sql.SQLExeption // urlなどの認証情報が間違っている
java.lang.ClassNotFoundException // JDBCドライバーがパスに入っていない

2. ステートメントオブジェクトを作成する

ステートメントとは、広義で「命令」のこと。
SQLは命令の一種。

import java.sql*;

...
String dbUrl = "jdbc:mysql://localhost:3306/demo"; // データベースのURL
String user = "student"; // ユーザー名
String pass = "student"; // パスワード

Connection myConn = DriverManger.getConnection(dbUrl, user, pass); // データベースへの接続
Statement myStmt = myConn.createStatement(); // ステートメントオブジェクトの作成

3. SQLクエリを実行する

import java.sql*;

...
String dbUrl = "jdbc:mysql://localhost:3306/demo"; // データベースのURL
String user = "student"; // ユーザー名
String pass = "student"; // パスワード

Connection myConn = DriverManger.getConnection(dbUrl, user, pass); // データベースへの接続
Statement myStmt = myConn.createStatement(); // ステートメントオブジェクトの作成

ResultSet = myTs = myStmt.executeQuery("select * from employees"); // SQLクエリの実行

4. Result Setを処理する

  • カーソルは最初の行の1つ前に置かれる(カーソルってなに?
  • ResultSet.next() メソッド
    • 一行ずつ進む
    • 処理する行があればtrueを返す
  • データを読み込むためのメソッド
    • getXXX(columnName)
    • getXXX(columnIndex) // 1オリジンになる (one-based)
import java.sql*;

...
String dbUrl = "jdbc:mysql://localhost:3306/demo"; // データベースのURL
String user = "student"; // ユーザー名
String pass = "student"; // パスワード

Connection myConn = DriverManger.getConnection(dbUrl, user, pass); // データベースへの接続
Statement myStmt = myConn.createStatement(); // ステートメントオブジェクトの作成

ResultSet = myTs = myStmt.executeQuery("select * from employees"); // SQLクエリの実行

while (myRs.next()) {
    // 各行のデータを読み込む
    System.out.println(myRs.getString("last_name")); 
    System.out.println(myRs.getString("first_name"));
}

まとめ

JDBCでデータベースを操作する流れは以下のとおりです。

  1. データベースへ接続する
  2. ステートメントオブジェクトを作成する
  3. SQLクエリを実行する
  4. リザルトセットを処理する