Java JDBCを使ったデータベース操作の基礎

Java

Java Database Connectivity(JDBC)は、Javaアプリケーションからデータベースに接続し、データを操作するための標準APIです。この記事では、JDBCを使ってデータベースに接続し、データの取得・挿入・更新・削除を行う基本的な方法をわかりやすく解説します。


1. JDBCを使うための準備

JDBCを使うためには、以下の準備が必要です。

(1) JDBCドライバを用意する

データベースに対応するJDBCドライバをダウンロードし、プロジェクトに追加します。例えば、MySQLの場合は mysql-connector-java を使用します。

  • Mavenプロジェクトであれば、以下を pom.xml に追加します。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>

(2) データベースを準備する

接続先のデータベースを作成し、必要なテーブルやデータを用意します。

  • MySQLでの例:
CREATE DATABASE exampledb;
USE exampledb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);

2. JDBCを使った基本操作の流れ

JDBCを使ったデータベース操作は、以下の手順で行います。

(1) JDBCドライバをロードする

データベースに接続するために、JDBCドライバをロードします。

Class.forName("com.mysql.cj.jdbc.Driver");

※最近のドライバでは自動ロードがサポートされているため、省略可能です。


(2) データベースに接続する

DriverManager.getConnection を使って接続します。

String url = "jdbc:mysql://localhost:3306/exampledb";
String user = "root";
String password = "password";

Connection conn = DriverManager.getConnection(url, user, password);

(3) SQLを実行する

StatementまたはPreparedStatementを使ってSQL文を実行します。

例: データの取得

String sql = "SELECT * FROM users";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println("ID: " + id + ", 名前: " + name + ", メール: " + email);
}

(4) リソースを解放する

使用したリソースを必ず閉じます。これにより、メモリリークを防ぎます。

conn.close();

3. JDBCを使った具体的な操作

以下は、データベースに接続して基本的な操作を行う例です。

(1) データの挿入

PreparedStatementを使うことで、SQLインジェクションのリスクを軽減できます。

String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "山田太郎");
pstmt.setString(2, "taro@example.com");
pstmt.executeUpdate();

(2) データの更新

String sql = "UPDATE users SET email = ? WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "new_email@example.com");
pstmt.setInt(2, 1); // id = 1のユーザーを更新
pstmt.executeUpdate();

(3) データの削除

String sql = "DELETE FROM users WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 1); // id = 1のユーザーを削除
pstmt.executeUpdate();

(4) トランザクション処理

複数のSQL操作をまとめて実行したい場合は、トランザクションを使います。

try {
conn.setAutoCommit(false); // 自動コミットを無効化

String sql1 = "INSERT INTO users (name, email) VALUES (?, ?)";
PreparedStatement pstmt1 = conn.prepareStatement(sql1);
pstmt1.setString(1, "田中一郎");
pstmt1.setString(2, "ichiro@example.com");
pstmt1.executeUpdate();

String sql2 = "UPDATE users SET email = ? WHERE id = ?";
PreparedStatement pstmt2 = conn.prepareStatement(sql2);
pstmt2.setString(1, "updated_email@example.com");
pstmt2.setInt(2, 2);
pstmt2.executeUpdate();

conn.commit(); // 全ての操作を確定
} catch (SQLException e) {
conn.rollback(); // エラーが発生したらロールバック
e.printStackTrace();
}

4. エラーハンドリングのポイント

エラーが発生した場合に備えて、適切なエラーハンドリングを行うことが重要です。

catch (SQLException e) {
System.err.println("SQLエラー: " + e.getMessage());
e.printStackTrace();
}

また、try-with-resources構文を使うことで、リソースを自動的に解放できます。

try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// SQL操作
} catch (SQLException e) {
e.printStackTrace();
}

5. JDBCの実践例:全体のコード

以下は、JDBCを使った一連の操作を含む完全な例です。

import java.sql.*;

public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/exampledb";
String user = "root";
String password = "password";

try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("データベースに接続成功!");

// データの挿入
String insertSql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {
pstmt.setString(1, "佐藤花子");
pstmt.setString(2, "hanako@example.com");
pstmt.executeUpdate();
System.out.println("データを挿入しました!");
}

// データの取得
String selectSql = "SELECT * FROM users";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(selectSql)) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println("ID: " + id + ", 名前: " + name + ", メール: " + email);
}
}
} catch (SQLException e) {
System.err.println("エラーが発生しました: " + e.getMessage());
e.printStackTrace();
}
}
}

6. 次のステップ:学びを深める

JDBCはJavaプログラミングの重要なスキルの一つです。これをきっかけに、さらに深い学びを進めていきましょう。


JDBCをマスターすれば、データベース操作の基礎をしっかり身につけられます。ぜひ挑戦してみてください!

コメント

タイトルとURLをコピーしました