以前、Javaのプログラムを動かすために必要な「JDK」とか「JRE」について学んだよね。今回は、さらにJavaプログラミングの世界を広げるために、**「データベース接続の基本」**をマスターしちゃいましょう!
「データベース」って聞くと、なんか難しそう…って思うかもしれないけど、要は「データを整理してしまっておく場所」のこと。みんなもお店で会員登録したり、ネットショッピングで注文履歴を見たりするよね? ああいうのが全部データベースに保存されてるんだ。
じゃあ、なんでJavaでデータベースに接続する必要があるの? それは、Javaで作ったアプリケーションとデータベースの間でデータのやり取りをするためなんだ。たとえば、ユーザーが入力した情報をデータベースに保存したり、データベースに保存されている情報をJavaのプログラムで表示したりね。
このJavaとデータベースをつなぐ架け橋となるのが、今回学ぶ「JDBC」なんだ! JDBCは「Java Database Connectivity」の略で、Javaからいろんな種類のデータベースに接続するための標準的な仕組みを提供してくれるんだよ。
JDBCって何?
JDBCは、例えるなら**「データベースと話すための共通語」**みたいなもの。世界にはMySQL、PostgreSQL、Oracle Database、SQL Serverとか、いろんな種類のデータベースがあるよね。それぞれ話す言葉が違うんだけど、JDBCを使うと、Javaのプログラムはどのデータベースに対しても同じように話しかけることができるようになるんだ。
JDBCを使えば、Javaのコードをちょこっと書くだけで、複雑なデータベースの操作ができちゃうんだから、すごいよね!
データベースに接続する流れ
じゃあ、実際にJavaでデータベースに接続する基本的な流れを見ていこう! 大まかには次の4つのステップだよ。
- JDBCドライバーの読み込み
- データベースへの接続
- SQL文の実行
- 接続のクローズ
ひとつずつ、丁寧に見ていこうね!
1. JDBCドライバーの読み込み
まず最初にやることは、JDBCドライバーの読み込みだね。JDBCドライバーは、特定のデータベースとJavaを接続するための「翻訳機」みたいなもの。データベースの種類によって違うドライバーが必要になるんだ。
例えば、MySQLデータベースに接続したい場合は「MySQL Connector/J」っていうドライバーを使うんだ。これは、インターネットからダウンロードして、Javaのプロジェクトに組み込む必要があるよ。
イメージとしては、こんな感じ。
Java
// これはあくまでイメージだよ!
// 実際のコードではこんな風には書かないけど、ドライバーがプログラムに「読み込まれる」っていうことをイメージしてね。
Class.forName("com.mysql.cj.jdbc.Driver");
このClass.forName()っていうのは、「このクラスを読み込んでね!」っていうおまじないみたいなものなんだ。この行を実行すると、指定したドライバーがJavaのプログラムで使えるようになるんだよ。
2. データベースへの接続
ドライバーが読み込めたら、次はいよいよデータベースへの接続だ! ここで使うのがDriverManager.getConnection()っていうメソッド。このメソッドに、接続したいデータベースの場所(URL)、ユーザー名、パスワードを教えてあげると、データベースとの接続が確立されるんだ。
Java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DbConnectionExample {
public static void main(String[] args) {
// データベース接続情報(これはあくまで例だよ! 自分の環境に合わせて変更してね)
String url = "jdbc:mysql://localhost:3306/test_db"; // データベースのURL
String user = "your_username"; // データベースのユーザー名
String password = "your_password"; // データベースのパスワード
Connection con = null; // 接続オブジェクト
try {
// ① JDBCドライバーの読み込み(MySQLの場合)
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("JDBCドライバーの読み込みに成功しました。");
// ② データベースへの接続
con = DriverManager.getConnection(url, user, password);
System.out.println("データベースへの接続に成功しました!");
} catch (ClassNotFoundException e) {
System.err.println("JDBCドライバーが見つかりません: " + e.getMessage());
} catch (SQLException e) {
System.err.println("データベース接続エラー: " + e.getMessage());
} finally {
// 接続を閉じる処理(後で詳しく説明するね)
if (con != null) {
try {
con.close();
System.out.println("データベース接続を閉じました。");
} catch (SQLException e) {
System.err.println("データベース接続のクローズ中にエラーが発生しました: " + e.getMessage());
}
}
}
}
}
このコードを実行してみて、「データベースへの接続に成功しました!」って表示されたら、第一関門突破だね!
jdbc:mysql://localhost:3306/test_dbって部分、ちょっとごちゃごちゃしてるけど、これは「JDBCを使って、MySQLデータベースの、自分のパソコン(localhost)の3306番ポートにあるtest_dbっていうデータベースに接続するよ!」っていう意味なんだ。
3. SQL文の実行
データベースに接続できたら、いよいよSQL文の実行だ! SQLっていうのは「Structured Query Language」の略で、データベースを操作するための専用の言語なんだ。データの追加、更新、削除、検索なんかは、このSQL文を使って行うんだよ。
JavaからSQL文を実行するには、主に次の2つのステップを踏むんだ。
Statementオブジェクトの作成- SQL文の実行と結果の取得
Java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; // Statementをインポート
import java.sql.ResultSet; // ResultSetをインポート
public class DbOperationExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db";
String user = "your_username";
String password = "your_password";
Connection con = null;
Statement stmt = null; // Statementオブジェクト
ResultSet rs = null; // ResultSetオブジェクト
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
System.out.println("データベースへの接続に成功しました!");
// ③ SQL文の実行
// テーブル作成の例(一度実行すればOK)
// MySQLでtest_dbに`users`テーブルを作成するSQL
String createTableSql = "CREATE TABLE IF NOT EXISTS users (" +
"id INT AUTO_INCREMENT PRIMARY KEY," +
"name VARCHAR(100) NOT NULL," +
"age INT" +
")";
stmt = con.createStatement(); // Statementオブジェクトを作成
stmt.executeUpdate(createTableSql); // SQLを実行(テーブル作成はexecuteUpdate)
System.out.println("usersテーブルが存在しない場合、作成しました。");
// データ挿入の例
String insertSql = "INSERT INTO users (name, age) VALUES ('田中', 25)";
int insertedRows = stmt.executeUpdate(insertSql); // データ挿入もexecuteUpdate
System.out.println(insertedRows + "件のデータを挿入しました。");
// データ検索の例
String selectSql = "SELECT id, name, age FROM users";
rs = stmt.executeQuery(selectSql); // データ検索はexecuteQuery
System.out.println("\n--- usersテーブルのデータ ---");
while (rs.next()) { // 1行ずつデータを取得
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("ID: " + id + ", 名前: " + name + ", 年齢: " + age);
}
} catch (ClassNotFoundException e) {
System.err.println("JDBCドライバーが見つかりません: " + e.getMessage());
} catch (SQLException e) {
System.err.println("データベース操作エラー: " + e.getMessage());
} finally {
// ④ 接続のクローズ
// 閉じる順番も大事だよ! ResultSet -> Statement -> Connection の順で閉じよう。
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (con != null) con.close();
System.out.println("データベース接続と関連リソースを閉じました。");
} catch (SQLException e) {
System.err.println("リソースのクローズ中にエラーが発生しました: " + e.getMessage());
}
}
}
}
ちょっとコードが長くなったけど、やってることはシンプルだよ。
con.createStatement()で、SQL文を実行するための「準備」をするんだ。この準備したものがStatementオブジェクト。stmt.executeUpdate()は、データベースのデータを変更するSQL(INSERTやUPDATE、DELETEなど)を実行するときに使うよ。今回はテーブル作成とデータ挿入で使ったね。stmt.executeQuery()は、データベースからデータを取得するSQL(SELECT)を実行するときに使うんだ。ResultSetは、SELECT文で取得した結果を格納するためのオブジェクト。rs.next()で1行ずつデータを取り出して、rs.getInt("id")とかrs.getString("name")で各列の値を取得できるんだ。
4. 接続のクローズ
最後に、使い終わったデータベースへの接続をしっかり閉じることがとっても大事! これを忘れると、データベースのリソースが無駄に消費されちゃったり、最悪の場合はデータベースが不安定になっちゃうこともあるんだ。
接続を閉じるのは、使ったものから順番に、ResultSet → Statement → Connectionの順で閉じるのがお約束だよ。
上のコードのfinallyブロックを見てみて。try-catch-finallyのfinallyブロックは、エラーが起きても起きなくても必ず実行される場所だから、ここで確実にリソースを解放するのがベストプラクティスなんだ。
エラーハンドリングについて
上の例でも少し触れたけど、データベース接続ではいろんなエラーが発生する可能性があるから、エラーハンドリング(エラーが起きた時にどう対処するか)がすごく重要になるんだ。
例えば、
- JDBCドライバーが見つからない
- データベースのユーザー名やパスワードが間違っている
- SQL文に間違いがある
なんかの場合だね。
Javaでは、こういった例外的な状況をtry-catchブロックを使って処理するんだ。tryブロックの中に「もしかしたらエラーが起こるかもしれないコード」を書いて、エラーが起こったらcatchブロックでそのエラーを捕まえて、適切な処理を行うんだよ。
まとめ
今回はJavaのデータベース接続の基本、JDBCについて学んだね!
- JDBCはJavaとデータベースをつなぐ共通語
- 接続のステップは、ドライバー読み込み → 接続 → SQL実行 → 接続クローズ
- SQLの実行には
StatementとResultSetを使う - 使い終わったらしっかり接続を閉じること(
finallyブロックで!)
これで、Javaプログラムからデータベースにアクセスするための扉が開かれたね! 次回は、今回学んだことを活かして、より実践的なデータベース操作のテクニックや、よく使うフレームワークなんかも紹介できたらいいなと思ってるよ。
これからも一緒にJavaプログラミングを楽しんでいこうね!
関連リンク
- 前回の記事: 【超入門】Javaを始める第一歩!JDKをインストールしよう! | ToolDocs
- JDBCについてもっと詳しく知りたいなら: Java JDBC API


コメント