Java Java Todo Webアプリ開発

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

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

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

\\現役エンジニアに質問できる//

月額制スクール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アカウントまでお願いします。

独学が辛いあなたへ

プログラミング学習にはエラーやわからないところというのはつきものです。

人に聞けば5分でわかることも、自分一人で悩んでいると1日数日時間を費やしてしまうこともあります。

そんな時にプログラミングスクールであれば、質問できる環境を手に入れることができます。

Freeksはいつでもどこでも豊富なカリキュラムを学ぶことができる月額制のプログラミングスクールです。

Freeksでは無料体験を行なっているので、質問できる環境を手に入れて、プログラミング学習を挫折することなく続けていきたいという方は無料体験に参加してみてください。

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

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

他のプログラミングスクール

月額10,780円のサブスク型プログラミングスクール!
>>Freeks公式サイト
20代におすすめ!無料で未経験からプログラマー就職まで実現できる!
>>ProgrammerCollege公式サイト
パーソナルメンターがつく充実したサポート
>>DMM WEBCAMP公式サイト

おすすめのプログラミングスクールについて詳しく知りたいという方はこちらの記事も参考にしてみてください。

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