💽
JDBCの概要と使い方
JDBC (Java DataBase Connectivity)とは
Javaアプリケーションとリレーショナルデータベースをつなげるもの (API)。
特徴
- 様々なデータベースへのポータブルなアクセスを提供する
異なるデータベースごとにコードを書く必要がない - Call Level Interface
ANSI SQL 2003 をサポートしている - カスタムのSQLステートメントをビルドできる
- select, insert, update, delete
- inner / outer join
- ストアドプロシージャをコールする
サポートしているデータベース
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 (コネクションプーリングのために)
開発プロセス
- データベースへ接続する
- ステートメントオブジェクトを作成する
- SQLクエリを実行する
- リザルトセットを処理する
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つ前に置かれる(カーソルってなに?)
- カーソル(簡単にまとめると、検索結果に対して1件ずつ処理するための仕組み)
- このページも参考になる (https://www.techscore.com/tech/sql/SQL12/12_02.html/)
- 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でデータベースを操作する流れは以下のとおりです。
- データベースへ接続する
- ステートメントオブジェクトを作成する
- SQLクエリを実行する
- リザルトセットを処理する
Discussion