Java Java Todo Webアプリ開発

【Javaサーブレット&jsp入門#2】PostgreSQLに接続する

※アフィリエイト広告を利用しています。

2021/10/07:データベースをMySQLからPostgreSQLに変更しました。

今回の記事はこちらの記事の続きとなっております。
前回はEclipseでプロジェクトを作成し、PostgreSQLでデータベースの準備を行いました。
今回はPostgreSQLに接続するための準備を行なっていきます。

挫折せずにプログラミングを学ぶために必要なこと

僕はプログラミングで挫折した経験があります。

それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。

Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。

次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。

  • エラーを一人で解消できない
  • このまま勉強を続けて本当に就職できるかわからない
  • プログラミングスクールは高額すぎて通えない
  • 申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
    >>Freeksの無料カウンセリングはこちら

    データベース接続準備

    PostgreSQL接続用のjdbcドライバの準備

    まずはJDBCドライバを使えるようにします。
    今回はPostgreSQLを使用するのでこちらからJDBCドライバをダウンロードします。
    ダウンロードした上でEclipseで使えるように設定を行います。
    作成したアプリ上で右クリック→「ビルド・パス」→「ビルドパスの構成」を選択します。

    出てきたウィンドウのライブラリーを選択し、「外部JARの追加...」を選択します。
    ダウンロードしたjdbcドライバを選択して外部JARとして追加します。

    プロジェクト内の参照ライブラリーにjdbcドライバが追加されていたら完了です。

    WEF-INF/libにjdbcドライバを格納

    こちらの記事を参考にTodoアプリを作成している方から質問をいただきました。
    ビルドパスの設定を行なったのにもかかわらず、DBにアクセスできず、エラーが起こるという現象がありました。

    具体的にはこの後のTodoを一覧で取得する際にClassNotFoundExceptionが発生するというエラーです。
    同じ現象が起きた場合には、プロジェクト内のWEB-INF/libフォルダ内にjdbcドライバを格納してみてください。

    他にも何かご質問等ありましたら、お手数ですがこちらのTwitterアカウントまでお願いいたします。
    お気軽にご質問ください。

    データベースへの接続をするクラスの作成

    今回作るWebアプリでは何度もデータベースとやりとりしたいので、共通する部分を一つのクラスにまとめておきます。
    前回作成したプロジェクトのsrcフォルダにmodelパッケージを作成してください。
    そしてmodelのなかにDBConnectionというJavaクラスを作成します。

    DBConnectionはgetConnectionというstaticなメソッドを持ちます。
    staticにしておくことでDBConnectionクラスをインスタンス化しなくてもgetConnectionメソッドを使えるようになります。

    package model;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class DBConnection {
    
        public static Connection getConnection() throws SQLException, ClassNotFoundException {
            // データベースのURL
            final String URL = "jdbc:postgresql://localhost:5432/tododb";
            // データベースにアクセスするユーザー
            final String USER = "sampleUser";
            // パスワード
            final String PASSWORD = "samplePass";
    
            Class.forName("org.postgresql.Driver");
            // データベースへ接続する
            Connection con = DriverManager.getConnection(URL, USER, PASSWORD);
            return con;
        }
    }

    定数としてPostgreSQLに接続するためのURL、接続するUSER、PASSWORDを宣言しておきます。USERの値とPASSWORDの値はご自身の環境に応じて適宜変更してください。

    final String URL = "jdbc:postgresql://localhost:5432/tododb";
    final String USER = "sampleUser";
    final String PASSWORD = "samplePass";

    DriverManagerのgetConnectionメソッドに引数として先ほど準備したURL、USER、PASSWORDを渡します。
    戻ってくるConnectionを受け取ってconという変数に格納しておきます。
    このConnectionオブジェクトであるconをreturnしてこのメソッドは終了です。

    Class.forName("org.postgresql.Driver");
    Connection con = DriverManager.getConnection(URL, USER, PASSWORD);
    return con;

    Class.forNameをしたときにClassNotFoundException、DriverManager.getConnectionをしたときにSQLExceptionが発生する可能性があるのでthrows宣言によって例外を呼び出し元に投げます。

    throws SQLException, ClassNotFoundException

    これでサーブレットを使ってPostgreSQLに接続するための準備が完了です。

    データを管理するためのクラスを準備

    データベースとやりとりするにあたって一つ一つのTodoを管理するためのクラスを作っておくと後々便利なので先に作っておきます。
    先ほどのDBConnectionと同じくmodelパッケージのなかに新しくdaoパッケージ、さらにその中にdtoパッケージを作成します。そしてdtoパッケージの中にTodoDTOクラスを作成します。

    中身は至ってシンプルです。
    今回扱うtodoではid、todo、timeLimitという三つのカラムが存在するのでこのTodoクラスも同じようなフィールドを準備します。
    他に引数なしのコンストラクタと、引数三つのコンストラクタも準備し、それぞれのフィールドのgetterとsetterも作っておきます。

    package model.dao.dto;
    
    import java.sql.Date;
    
    /**
     * Todoを保持するクラス
     * @author yuhablog
     */
    public class TodoDTO {
        /**
         * TodoのIdを保持する
         */
        private int id;
    
        /**
         * Todoの内容を保持する
         */
        private String todo;
    
        /**
         * Todoの期限を保持する
         */
        private Date timeLimit;
    
        /**
         * 引数なしコンストラクタ
         * 初期化を行う
         */
        public TodoDTO () {
            id = 0;
            todo = "";
            timeLimit = new Date(System.currentTimeMillis());
        }
    
        /**
         * 受け取った引数によって初期化を行う
         * @param id
         * @param todo
         * @param timeLimit
         */
        public TodoDTO(int id, String todo, Date timeLimit) {
            this.id = id;
            this.todo = todo;
            this.timeLimit = timeLimit;
        }
    
        /**
         * idを取得する
         * @return id
         */
        public int getId() {
            return id;
        }
    
        /**
         * idを設定する
         * @param id
         */
        public void setId(int id) {
            this.id = id;
        }
    
        /**
         * Todoの内容を取得する
         * @return Todoの内容
         */
        public String getTodo() {
            return todo;
        }
    
        /**
         * Todoの内容を設定する
         * @param todo
         */
        public void setTodo(String todo) {
            this.todo = todo;
        }
    
        /**
         * Todoの期限を取得する
         * @return
         */
        public Date getTimeLimit() {
            return timeLimit;
        }
    
        /**
         * Todoの期限を設定する
         * @param timeLimit
         */
        public void setTimeLimit(Date timeLimit) {
            this.timeLimit = timeLimit;
        }
    }

    次回予告

    今回はこれら二つのクラスを作るところで終わりにします。

    次回はいよいよ、データベースからデータを取得し、Webブラウザで一覧表示してみます。

    データベースのデータを表示する

    ご質問等あればこちらのTwitterアカウントまでお願いします。

    挫折せずにプログラミングを学ぶためには?

    挫折せずにプログラミングを学ぶために必要なこと

    僕はプログラミングで挫折した経験があります。

    それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。

    Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。

    次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。

  • エラーを一人で解消できない
  • このまま勉強を続けて本当に就職できるかわからない
  • プログラミングスクールは高額すぎて通えない
  • 申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
    >>Freeksの無料カウンセリングはこちら

    Freeks公式サイトはこちら>>>

    【関連記事】Freeks評判、口コミ

    -Java, Java Todo Webアプリ開発
    -, , , , ,