Java Database Connectivity(JDBC)は、Javaアプリケーションからデータベースに接続し、データを操作するための標準APIです。この記事では、JDBCを使ってデータベースに接続し、データの取得・挿入・更新・削除を行う基本的な方法をわかりやすく解説します。
1. JDBCを使うための準備
JDBCを使うためには、以下の準備が必要です。
(1) JDBCドライバを用意する
データベースに対応するJDBCドライバをダウンロードし、プロジェクトに追加します。例えば、MySQLの場合は mysql-connector-java
を使用します。
- Mavenプロジェクトであれば、以下を
pom.xml
に追加します。
1 |
<dependency><br> <groupId>mysql</groupId><br> <artifactId>mysql-connector-java</artifactId><br> <version>8.0.30</version><br></dependency><br> |
(2) データベースを準備する
接続先のデータベースを作成し、必要なテーブルやデータを用意します。
- MySQLでの例:
1 |
CREATE DATABASE exampledb;<br>USE exampledb;<br>CREATE TABLE users (<br> id INT AUTO_INCREMENT PRIMARY KEY,<br> name VARCHAR(50),<br> email VARCHAR(100)<br>);<br> |
2. JDBCを使った基本操作の流れ
JDBCを使ったデータベース操作は、以下の手順で行います。
(1) JDBCドライバをロードする
データベースに接続するために、JDBCドライバをロードします。
1 |
Class.forName("com.mysql.cj.jdbc.Driver");<br> |
※最近のドライバでは自動ロードがサポートされているため、省略可能です。
(2) データベースに接続する
DriverManager.getConnection
を使って接続します。
1 |
String url = "jdbc:mysql://localhost:3306/exampledb";<br>String user = "root";<br>String password = "password";<br><br>Connection conn = DriverManager.getConnection(url, user, password);<br> |
(3) SQLを実行する
Statement
またはPreparedStatement
を使ってSQL文を実行します。
例: データの取得
1 |
String sql = "SELECT * FROM users";<br>Statement stmt = conn.createStatement();<br>ResultSet rs = stmt.executeQuery(sql);<br><br>while (rs.next()) {<br> int id = rs.getInt("id");<br> String name = rs.getString("name");<br> String email = rs.getString("email");<br> System.out.println("ID: " + id + ", 名前: " + name + ", メール: " + email);<br>}<br> |
(4) リソースを解放する
使用したリソースを必ず閉じます。これにより、メモリリークを防ぎます。
1 |
conn.close();<br> |
3. JDBCを使った具体的な操作
以下は、データベースに接続して基本的な操作を行う例です。
(1) データの挿入
PreparedStatement
を使うことで、SQLインジェクションのリスクを軽減できます。
1 |
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";<br>PreparedStatement pstmt = conn.prepareStatement(sql);<br>pstmt.setString(1, "山田太郎");<br>pstmt.setString(2, "taro@example.com");<br>pstmt.executeUpdate();<br> |
(2) データの更新
1 |
String sql = "UPDATE users SET email = ? WHERE id = ?";<br>PreparedStatement pstmt = conn.prepareStatement(sql);<br>pstmt.setString(1, "new_email@example.com");<br>pstmt.setInt(2, 1); // id = 1のユーザーを更新<br>pstmt.executeUpdate();<br> |
(3) データの削除
1 |
String sql = "DELETE FROM users WHERE id = ?";<br>PreparedStatement pstmt = conn.prepareStatement(sql);<br>pstmt.setInt(1, 1); // id = 1のユーザーを削除<br>pstmt.executeUpdate();<br> |
(4) トランザクション処理
複数のSQL操作をまとめて実行したい場合は、トランザクションを使います。
1 |
try {<br> conn.setAutoCommit(false); // 自動コミットを無効化<br><br> String sql1 = "INSERT INTO users (name, email) VALUES (?, ?)";<br> PreparedStatement pstmt1 = conn.prepareStatement(sql1);<br> pstmt1.setString(1, "田中一郎");<br> pstmt1.setString(2, "ichiro@example.com");<br> pstmt1.executeUpdate();<br><br> String sql2 = "UPDATE users SET email = ? WHERE id = ?";<br> PreparedStatement pstmt2 = conn.prepareStatement(sql2);<br> pstmt2.setString(1, "updated_email@example.com");<br> pstmt2.setInt(2, 2);<br> pstmt2.executeUpdate();<br><br> conn.commit(); // 全ての操作を確定<br>} catch (SQLException e) {<br> conn.rollback(); // エラーが発生したらロールバック<br> e.printStackTrace();<br>}<br> |
4. エラーハンドリングのポイント
エラーが発生した場合に備えて、適切なエラーハンドリングを行うことが重要です。
1 |
catch (SQLException e) {<br> System.err.println("SQLエラー: " + e.getMessage());<br> e.printStackTrace();<br>}<br> |
また、try-with-resources
構文を使うことで、リソースを自動的に解放できます。
1 |
try (Connection conn = DriverManager.getConnection(url, user, password);<br> PreparedStatement pstmt = conn.prepareStatement(sql)) {<br> // SQL操作<br>} catch (SQLException e) {<br> e.printStackTrace();<br>}<br> |
5. JDBCの実践例:全体のコード
以下は、JDBCを使った一連の操作を含む完全な例です。
1 |
import java.sql.*;<br><br>public class JdbcExample {<br> public static void main(String[] args) {<br> String url = "jdbc:mysql://localhost:3306/exampledb";<br> String user = "root";<br> String password = "password";<br><br> try (Connection conn = DriverManager.getConnection(url, user, password)) {<br> System.out.println("データベースに接続成功!");<br><br> // データの挿入<br> String insertSql = "INSERT INTO users (name, email) VALUES (?, ?)";<br> try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {<br> pstmt.setString(1, "佐藤花子");<br> pstmt.setString(2, "hanako@example.com");<br> pstmt.executeUpdate();<br> System.out.println("データを挿入しました!");<br> }<br><br> // データの取得<br> String selectSql = "SELECT * FROM users";<br> try (Statement stmt = conn.createStatement();<br> ResultSet rs = stmt.executeQuery(selectSql)) {<br> while (rs.next()) {<br> int id = rs.getInt("id");<br> String name = rs.getString("name");<br> String email = rs.getString("email");<br> System.out.println("ID: " + id + ", 名前: " + name + ", メール: " + email);<br> }<br> }<br> } catch (SQLException e) {<br> System.err.println("エラーが発生しました: " + e.getMessage());<br> e.printStackTrace();<br> }<br> }<br>}<br> |
6. 次のステップ:学びを深める
JDBCはJavaプログラミングの重要なスキルの一つです。これをきっかけに、さらに深い学びを進めていきましょう。
- 「絶対にJavaプログラマーになりたい人へ」を参考に基礎を固める。
- 実践的なスキルや転職サポートを求めるなら、「サイゼントアカデミー」を活用する。
JDBCをマスターすれば、データベース操作の基礎をしっかり身につけられます。ぜひ挑戦してみてください!
コメント