JSPにおけるデータベース操作の基本実装

ここでは、JSPアプリケーション内でデータベースに対するCRUD操作(作成・読み取り・更新・削除)をJavaコードで実装する方法を解説します。オブジェクト指向設計に基づき、インターフェースと具体的な実装クラスを用いて整理します。

エンティティクラスの定義

public class Learner {
    private int learnerId;
    private String fullName;
    private int gender;
    private int age;
    private String hometown;
    private String institution;

    // GetterとSetterメソッド
    public int getLearnerId() { return learnerId; }
    public void setLearnerId(int learnerId) { this.learnerId = learnerId; }

    public String getFullName() { return fullName; }
    public void setFullName(String fullName) { this.fullName = fullName; }

    public int getGender() { return gender; }
    public void setGender(int gender) { this.gender = gender; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public String getHometown() { return hometown; }
    public void setHometown(String hometown) { this.hometown = hometown; }

    public String getInstitution() { return institution; }
    public void setInstitution(String institution) { this.institution = institution; }
}

データアクセスインターフェース

import java.util.List;

public interface LearnerDao {
    boolean insert(Learner learner);
    boolean remove(int learnerId);
    boolean modify(Learner learner);
    Learner find(int learnerId);
    List<Learner> searchByName(String keyword);
    List<Learner> listAll();
}

レコード追加処理

public boolean insert(Learner learner) {
    String query = "INSERT INTO learners (fullName, gender, age, hometown, institution) VALUES (?, ?, ?, ?, ?)";
    try (Connection connection = DatabaseUtil.getConnection();
         PreparedStatement stmt = connection.prepareStatement(query)) {

        stmt.setString(1, learner.getFullName());
        stmt.setInt(2, learner.getGender());
        stmt.setInt(3, learner.getAge());
        stmt.setString(4, learner.getHometown());
        stmt.setString(5, learner.getInstitution());

        return stmt.executeUpdate() > 0;
    } catch (SQLException e) {
        e.printStackTrace();
        return false;
    }
}

レコード削除処理

public boolean remove(int learnerId) {
    String query = "DELETE FROM learners WHERE learnerId = ?";
    try (Connection connection = DatabaseUtil.getConnection();
         PreparedStatement stmt = connection.prepareStatement(query)) {

        stmt.setInt(1, learnerId);
        return stmt.executeUpdate() > 0;
    } catch (SQLException e) {
        e.printStackTrace();
        return false;
    }
}

レコード更新処理

public boolean modify(Learner learner) {
    String query = "UPDATE learners SET fullName=?, gender=?, age=?, hometown=?, institution=? WHERE learnerId=?";
    try (Connection connection = DatabaseUtil.getConnection();
         PreparedStatement stmt = connection.prepareStatement(query)) {

        stmt.setString(1, learner.getFullName());
        stmt.setInt(2, learner.getGender());
        stmt.setInt(3, learner.getAge());
        stmt.setString(4, learner.getHometown());
        stmt.setString(5, learner.getInstitution());
        stmt.setInt(6, learner.getLearnerId());

        return stmt.executeUpdate() > 0;
    } catch (SQLException e) {
        e.printStackTrace();
        return false;
    }
}

単一レコード取得

public Learner find(int learnerId) {
    String query = "SELECT * FROM learners WHERE learnerId = ?";
    try (Connection connection = DatabaseUtil.getConnection();
         PreparedStatement stmt = connection.prepareStatement(query)) {

        stmt.setInt(1, learnerId);
        try (ResultSet rs = stmt.executeQuery()) {
            if (rs.next()) {
                Learner learner = new Learner();
                learner.setLearnerId(rs.getInt("learnerId"));
                learner.setFullName(rs.getString("fullName"));
                learner.setGender(rs.getInt("gender"));
                learner.setAge(rs.getInt("age"));
                learner.setHometown(rs.getString("hometown"));
                learner.setInstitution(rs.getString("institution"));
                return learner;
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

部分一致検索

public List<Learner> searchByName(String keyword) {
    List<Learner> results = new ArrayList<>();
    String query = "SELECT * FROM learners WHERE fullName LIKE ?";
    try (Connection connection = DatabaseUtil.getConnection();
         PreparedStatement stmt = connection.prepareStatement(query)) {

        stmt.setString(1, "%" + keyword + "%");
        try (ResultSet rs = stmt.executeQuery()) {
            while (rs.next()) {
                Learner learner = new Learner();
                learner.setLearnerId(rs.getInt("learnerId"));
                learner.setFullName(rs.getString("fullName"));
                learner.setGender(rs.getInt("gender"));
                learner.setAge(rs.getInt("age"));
                learner.setHometown(rs.getString("hometown"));
                learner.setInstitution(rs.getString("institution"));
                results.add(learner);
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return results;
}

全件取得

public List<Learner> listAll() {
    List<Learner> allLearners = new ArrayList<>();
    String query = "SELECT * FROM learners";
    try (Connection connection = DatabaseUtil.getConnection();
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery(query)) {

        while (rs.next()) {
            Learner learner = new Learner();
            learner.setLearnerId(rs.getInt("learnerId"));
            learner.setFullName(rs.getString("fullName"));
            learner.setGender(rs.getInt("gender"));
            learner.setAge(rs.getInt("age"));
            learner.setHometown(rs.getString("hometown"));
            learner.setInstitution(rs.getString("institution"));
            allLearners.add(learner);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return allLearners;
}

タグ: JSP Java JDBC PreparedStatement crud

7月30日 17:58 投稿