LoginSignup
0
0

Javaプログラミング入門:ステップ4 データベースとの連携

Posted at

Javaプログラミング入門:ステップ4 データベースとの連携

Webアプリケーションにおいて、データベースとの連携は欠かせません。Javaでは、JDBC(Java Database Connectivity)を使用してデータベースにアクセスできます。本記事では、データベースとの連携を学ぶためのステップ4として、以下の内容を順を追って解説します。

  1. JDBCの基本操作(接続、クエリ実行、結果の処理)
  2. DB2の基本的な操作方法
  3. データベースアクセス層の設計

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を使用した基本的なデータベース操作と、データベースアクセス層の設計についての解説です。これらの基礎を理解し、実際にコードを試してみることで、データベースとの連携スキルを向上させましょう。次回は、より高度なデータベース操作に挑戦してみましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0