Javaプログラミング入門:ステップ4 データベースとの連携
Webアプリケーションにおいて、データベースとの連携は欠かせません。Javaでは、JDBC(Java Database Connectivity)を使用してデータベースにアクセスできます。本記事では、データベースとの連携を学ぶためのステップ4として、以下の内容を順を追って解説します。
- JDBCの基本操作(接続、クエリ実行、結果の処理)
- DB2の基本的な操作方法
- データベースアクセス層の設計
1. JDBCの基本操作(接続、クエリ実行、結果の処理)
JDBCは、Javaプログラムからデータベースに接続し、SQLクエリを実行するためのAPIです。JDBCの基本操作は、次のように進めます。
データベース接続
データベースに接続するためには、JDBCドライバをロードし、DriverManager
を使用して接続を確立します。
SQLクエリの実行
接続が確立したら、Statement
またはPreparedStatement
を使用してSQLクエリを実行します。
結果の処理
クエリの結果はResultSet
オブジェクトを通じて取得し、処理します。
例:JDBCを使用した基本操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:db2://localhost:50000/sample";
String user = "db2user";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement()) {
String query = "SELECT * FROM employees";
ResultSet resultSet = statement.executeQuery(query);
while (resultSet.next()) {
System.out.println("ID: " + resultSet.getInt("id"));
System.out.println("Name: " + resultSet.getString("name"));
System.out.println("Position: " + resultSet.getString("position"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. DB2の基本的な操作方法
DB2は、IBMが提供するリレーショナルデータベース管理システム(RDBMS)です。DB2の基本操作には、データベースの作成、テーブルの作成、データの挿入、クエリの実行などが含まれます。
データベースの作成
CREATE DATABASE sample;
テーブルの作成
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(100)
);
データの挿入
INSERT INTO employees (id, name, position) VALUES (1, 'Alice', 'Manager');
INSERT INTO employees (id, name, position) VALUES (2, 'Bob', 'Developer');
クエリの実行
SELECT * FROM employees;
3. データベースアクセス層の設計
データベースアクセス層は、データベースとのやり取りを抽象化し、ビジネスロジックからデータベース操作を分離する役割を持ちます。この層を設計することで、コードの再利用性と保守性を向上させることができます。
DAOパターンの使用
DAO(Data Access Object)パターンは、データベースアクセス層の設計において一般的に使用されるデザインパターンです。DAOパターンを使用することで、データベース操作を統一的に扱うことができます。
DAOインターフェースの定義
public interface EmployeeDao {
void addEmployee(Employee employee);
Employee getEmployee(int id);
List<Employee> getAllEmployees();
void updateEmployee(Employee employee);
void deleteEmployee(int id);
}
DAOインターフェースの実装
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class EmployeeDaoImpl implements EmployeeDao {
private String url = "jdbc:db2://localhost:50000/sample";
private String user = "db2user";
private String password = "password";
@Override
public void addEmployee(Employee employee) {
String query = "INSERT INTO employees (id, name, position) VALUES (?, ?, ?)";
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setInt(1, employee.getId());
preparedStatement.setString(2, employee.getName());
preparedStatement.setString(3, employee.getPosition());
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Employee getEmployee(int id) {
String query = "SELECT * FROM employees WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setInt(1, id);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
return new Employee(resultSet.getInt("id"), resultSet.getString("name"), resultSet.getString("position"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Employee> getAllEmployees() {
List<Employee> employees = new ArrayList<>();
String query = "SELECT * FROM employees";
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query)) {
while (resultSet.next()) {
employees.add(new Employee(resultSet.getInt("id"), resultSet.getString("name"), resultSet.getString("position")));
}
} catch (SQLException e) {
e.printStackTrace();
}
return employees;
}
@Override
public void updateEmployee(Employee employee) {
String query = "UPDATE employees SET name = ?, position = ? WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setString(1, employee.getName());
preparedStatement.setString(2, employee.getPosition());
preparedStatement.setInt(3, employee.getId());
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void deleteEmployee(int id) {
String query = "DELETE FROM employees WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setInt(1, id);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
エンティティクラスの作成
public class Employee {
private int id;
private String name;
private String position;
public Employee(int id, String name, String position) {
this.id = id;
this.name = name;
this.position = position;
}
// ゲッターとセッター
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
以上が、JDBCとDB2を使用した基本的なデータベース操作と、データベースアクセス層の設計についての解説です。これらの基礎を理解し、実際にコードを試してみることで、データベースとの連携スキルを向上させましょう。次回は、より高度なデータベース操作に挑戦してみましょう。