【JavaサンプルWebアプリ#2】サーブレットでPostgreSQLに接続する

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

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

その他の機能はこちらにまとめています。

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

現役エンジニアが教えるJava初心者からWebアプリ開発できるようになるまでの勉強法>>>

データベース接続準備

jdbcドライバの準備

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

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

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

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

今回作る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;
	}
}

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

final String URL = "jdbc:mysql://localhost:3306/tododb";
final String USER = "sampleUser";
final String PASSWORD = "samplePass";

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

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(URL, USER, PASSWORD);
return con;

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

throws SQLException, ClassNotFoundException

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

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

データベースとやりとりするにあたって一つ一つのTodoを管理するためのクラスを作っておくと後々便利なので先に作っておきます。先ほどのDBConnectionと同じくmodelパッケージのなかに新しくdtoパッケージ、さらにその中に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で行うのが以下のような理由で圧倒的におすすめです。

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

UdemyにはJava x MySQLでWebアプリの作り方が学べるUdemy講座 もあるので興味がある方は一度チェックしてみてください!なおUdemyは頻繁にセールをやっているので、セール時を狙って購入してください!

関連記事

コメント

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