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

Java

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

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

Udemyの動画講座でわかりやすくサーブレットを勉強するicon

データベース接続準備

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アカウントまでお願いします。

私はプログラミング学習はオンライン動画学習サービスのUdemyで行うのが
圧倒的におすすめです。
Udemyでは

  • 動画で好きな時間・隙間時間に学べる
  • 一流のエンジニアから教えてもらえる
  • 好きな技術を体系的に学べる
  • 実際に手を動かしながら学ぶことができる
  • セール時であれば1500円〜2000円ほどで購入できる(大半の技術書より安い)
  • 講座自体がアップデートされていくので情報が古くなりにくい

Udemyにはサーブレットを学べる講座iconもあります。
「これからサーブレットを学んでJavaでWebアプリケーションを作れるようになりたい!」という方はチェックしてみてください

タイトルとURLをコピーしました