はじめに
この記事では、JDBC(Java Database Connectivity)の基本概念、主要なコンポーネント、およびJavaコードの実例について詳しく解説します。初心者でも理解しやすいように、JDBCの基本的な流れから、具体的なコード例までをカバーします。
JDBCの基本概念
JDBCは、Javaアプリケーションと関係データベースを接続するためのAPIです。統一されたインターフェースを提供し、以下のようなデータベース操作が可能です:
- データベースへの接続
- SQLクエリや更新の実行
- 結果セットの取得と操作
- DriverManager:ドライバを管理し、データベースとの接続を確立します。
- Connection:データベース接続を表すオブジェクトで、SQL文を送信します。
- Statement:SQL文を実行するためのオブジェクト(
Statement
、PreparedStatement
、CallableStatement
)。 - ResultSet:クエリ結果を保持するデータ表で、結果を1行ずつ処理します。
JDBCの基本的な流れ
- ドライバの読み込み:
Class.forName
でデータベースドライバを読み込みます。 - データベース接続の確立:
DriverManager.getConnection
でConnection
オブジェクトを作成します。 - SQL文の作成:
Connection
オブジェクトを用いてStatement
またはPreparedStatement
を作成します。 - SQL文の実行:
executeQuery
やexecuteUpdate
でSQL文を実行します。 - 結果セットの処理:
ResultSet
オブジェクトを使用して結果を読み取ります。 - リソースの解放:
ResultSet
、Statement
、Connection
を閉じてリソースを解放します。
Javaコード例:データベースからデータを取得する
以下は、MySQLデータベースからユーザーデータを取得するサンプルコードです。
import java.sql.*; public class JDBCDemo { public static void main(String[] args) { String jdbcURL = "jdbc:mysql://localhost:3306/demo"; // データベースURL String username = "root"; // ユーザー名 String password = "password"; // パスワード Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { // 1. ドライバの読み込み Class.forName("com.mysql.cj.jdbc.Driver"); // 2. データベース接続の確立 connection = DriverManager.getConnection(jdbcURL, username, password); System.out.println("接続成功!"); // 3. SQL文の作成 String sql = "SELECT id, name, email FROM users"; statement = connection.createStatement(); // 4. クエリの実行 resultSet = statement.executeQuery(sql); // 5. 結果セットの処理 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); String email = resultSet.getString("email"); System.out.printf("ID: %d, Name: %s, Email: %s%n", id, name, email); } } catch (ClassNotFoundException e) { System.out.println("ドライバの読み込みに失敗しました:" + e.getMessage()); } catch (SQLException e) { System.out.println("データベース操作中にエラーが発生しました:" + e.getMessage()); } finally { // 6. リソースの解放 try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); } catch (SQLException e) { System.out.println("リソース解放中にエラーが発生しました:" + e.getMessage()); } } } }
PreparedStatementを使用した例(SQLインジェクション対策)
PreparedStatement
を使うことで、SQLインジェクションを防ぐことができます。
String sql = "SELECT * FROM users WHERE email = ?"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { preparedStatement.setString(1, "example@example.com"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { System.out.println("Name: " + resultSet.getString("name")); } }
JDBCのコアコンポーネント詳細
コンポーネント名 | 完全修飾名 | タイプ | 主な役割 |
---|---|---|---|
DriverManager |
java.sql.DriverManager |
クラス | ドライバ管理と接続確立 |
Connection |
java.sql.Connection |
インターフェース | データベース接続 |
Statement |
java.sql.Statement |
インターフェース | 静的SQL文の実行 |
ResultSet |
java.sql.ResultSet |
インターフェース | クエリ結果の保持と処理 |
まとめ
JDBCは、Javaアプリケーションでデータベースとやり取りするための非常に重要なAPIです。本記事では、基本概念から主要コンポーネント、そして実際のコード例までを解説しました。特に、PreparedStatement
を使用することで安全性を確保できる点に注意してください。
ぜひこの記事を参考に、JDBCを使ったデータベース操作を実践してみてください!