個別指導 Javaプログラミングスクール 武蔵浦和(中浦和)

現役SE(システムエンジニア)が埼京線の武蔵浦和(中浦和)周辺でJavaプログラミング学習の個別指導を行っています。

データベース接続4

[Webアプリケーション] データベース接続4

Javaでデータベースの接続方法を学習したので、実際にスケジュールアプリのプログラミングを開始する準備をしましょう。

スケジュールアプリのプログラムは、DTO・DAOパターンを採用し、下記4つのクラスで構成します。
・Mainクラス ... ユーザー情報や、スケジュールの入力処理のみを行う。

ビジネスロジック ... 実際の処理をまとめたクラス。メインクラスから呼び出されるプログラムを作成する。

・DAO(Data Access Object) ... データベースにアクセスする処理をまとめたクラス。

DTO(Data Transfer Object) ... データベースから取得したデータを格納するためのクラス。格納したデータをビジネスロジックに渡すために使用する。

DTO・DAOパターン

まずは、下記サンプルを参考に簡単なDTO・DAOパターンのプログラムを作成してみましょう。

・実行するJavaクラス

public static void main(String[] args) {
    String comma = ",";
    //DAOをインスタンス化
    Common_DAO cd = new Common_DAO();
    //DTOでユーザーテーブルのデータを取得
    List<User_DTO> list = cd.getUserInfo();

    System.out.println("ユーザーテーブルを表示");
    if(list != null) {
        for(int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).getUserID());
            System.out.print(comma);
            System.out.print(list.get(i).getUserName());
            System.out.print(comma);
            System.out.print(list.get(i).getGender());
            System.out.print(comma);
            System.out.println(list.get(i).getEmail());
        }
    }else{
        System.out.print("データの取得失敗");
        }
}


・User_DTO クラス(DTO
データベースの値を格納するメンバ変数(フィールド)とゲッター、セッターを用意しただけのクラス。

public class User_DTO {
    //フィールド
    private String userID;
    private String userName;
    private String gender;
    private String email;
    
    //ゲッター、セッター
    public String getUserID() {
        return userID;
    }
    public void setUserID(String userID) {
        this.userID = userID;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

}


・Common_DAO クラス(DAO)
データベース接続3で、mainメソッドに書いたデータベースの接続処理をメソッド化して、まとめたクラス。

public class Common_DAO  {
    // フィールド
    private Connection con;

    // コンストラクタ
    public Common_DAO () {
        getConnection();
    }
    // メソッド
    //------------------------------------------------------------
    // getConnection:データベース接続
    // 引数  :なし
    // 戻り値:なし
    //------------------------------------------------------------
    private void getConnection() {
        try {
            //JDBCドライバーのロード
            Class.forName("com.mysql.cj.jdbc.Driver");
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
        }
        //URL、ユーザー名、パスワードに値を設定
        String url   = "jdbc:mysql://localhost/データベース"
                         + "?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false";
        String user = "ユーザー";
        String pw   = "パスワード";
        try {
            con = DriverManager.getConnection(url, user, pw);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    //------------------------------------------------------------
    // close :データベース接続をクローズ
    // 引数  :なし
    // 戻り値:なし
    //------------------------------------------------------------
    private void close() throws SQLException{
        if(con != null) {
                con.close();
        }
    }
    //------------------------------------------------------------
    // getUserInfo:ユーザーテーブルのデータを取得
    // 引数  :なし
    // 戻り値:ユーザー情報 (List)
    //------------------------------------------------------------
    public List<User_DTO > getUserInfo() {
        //return用のリスト(DTOをリストに格納していく)
        List list = new ArrayList<User_DTO >();
        //プリペアードステートメント
        PreparedStatement st = null;
        //リザルトセット
        ResultSet rs =null;
        try {
            //SQL文の生成
            StringBuilder buf = new StringBuilder();
            buf.append(" SELECT      ");
            buf.append("      COL1   ");
            buf.append("     ,COL2   ");
            buf.append("     ,COL3   ");
            buf.append("     ,COL4   ");
            buf.append(" FROM        ");
            buf.append("     SAMPLE  ");

            //preparedStatementオブジェクトの生成
            st = con.prepareStatement(buf.toString());

            rs = st.executeQuery();

            while(rs.next()) {
                User_DTO dto = new User_DTO();
                dto.setUserID(rs.getString("COL1"));
                dto.setUserName(rs.getString("COL2"));
                dto.setGender(rs.getString("COL3"));
                dto.setEmail(rs.getString("COL4"));
                list.add(dto);
            }

        }catch(SQLException e) {
            e.printStackTrace();
        }finally {
            //リソースの開放
            try {
                if(st != null) {
                    st.close();
                }
                if(rs != null) {
                    rs.close();
                }
                close();
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com