【サーブレット&jsp】データベースのデータを表示する

Java

今回の記事ではJavaのサーブレットとjspでPostgreSQLからデータを取得してjspで表示する方法について解説していきます。
データベースからデータを取得するのはWebアプリで必須となりますので、ぜひやり方を覚えてください!

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

データを取得するテーブル

今回はPostgreSQLを使って、次のようなテーブルからデータを取得します。

  • データベース名:BlogDB
  • テーブル名:booksinfo
  • ユーザー:uhablog

テーブルには次のようなデータが入っています。

BlogDB=> select * from booksinfo;
  1 | 僕は勉強ができない       |   800
  2 | 僕は愛を証明しようと思う |  1000
  3 | サピエンス全史           |  1500
  4 | 半導体の地政学           |   500

このテーブルにサーブレットで接続して本のタイトルを全件取得し、jspで表示するアプリを作成していきます。

サーブレットの作成

まずはサーブレットを作成します。
doGetメソッドは次のようになります。

/**
 * GETリクエストを受け付けて、DBからデータを取得する
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
		
	// データベースに接続するための情報
	String url = "jdbc:postgresql://localhost:5432/BlogDB";
	String user = "uhablog";
	String password = "P@ssw0rd";
		
	// 本のタイトルを格納するList
	List<String> books = new ArrayList<>();
		
	// データベースに接続する
	try {
		Class.forName("org.postgresql.Driver");

		try (Connection con = DriverManager.getConnection(url, user, password);
				Statement st = con.createStatement();){

			// SQLを実行して、テーブルから本のタイトルを取得する
			ResultSet res = st.executeQuery("SELECT title FROM booksinfo");

			// 取得した件数分繰り返す
			while(res.next()) {
				// リストに本のタイトルを追加
				books.add(res.getString("title"));
			}
		
		} catch(SQLException e) {
			e.printStackTrace();
		}
	} catch(ClassNotFoundException e) {
		e.printStackTrace();
	}
		
	// リクエストスコープへオブジェクト設定する
	request.setAttribute("books", books);
	
	// 次の画面に遷移
	request.getRequestDispatcher("/books-list.jsp").forward(request, response);
}

データベースへの接続

ここから詳しくコードの解説をしていきます。
まず最初に次の部分でデータベースに接続するための情報を変数に格納しています。

// データベースに接続するための情報
String url = "jdbc:postgresql://localhost:5432/BlogDB";
String user = "uhablog";
String password = "P@ssw0rd";

今回はPostgreSQLのBlogDBに接続するため、urlは上記のようになっています。
データベースとして、MySQLなどの他のものを使っている場合は変更する必要があります。

そして、次のtryの中で、データベースに接続しています。

// データベースに接続する
try {
	Class.forName("org.postgresql.Driver");

	try (Connection con = DriverManager.getConnection(url, user, password);
			Statement st = con.createStatement();){

SQLの実行とデータの取り出し

次にSQLを実行し、データを取り出している箇所について解説します。
try文を使って、データベースへの接続を確保した後に、try文の中でSQL文を実行しています。

// SQLを実行して、テーブルから本のタイトルを取得する
ResultSet res = st.executeQuery("SELECT title FROM booksinfo");

// 取得した件数分繰り返す
while(res.next()) {
	// リストに本のタイトルを追加
	books.add(res.getString("title"));
}

executeQueryメソッドの引数に実行したいSQL文を渡しています。
結果をResultSetとして受け取り、結果の件数分だけ、Listにデータを格納しています。

このListをjspに受け渡して、サーブレットの処理は終了します。
サーブレットとjspの値の受け渡しについては次の記事も参考にしてみてください。

jsp

jspではサーブレットからListを受け取って、データベースのデータを表示します。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>データベースの接続確認</title>
</head>
<body>
	<% List<String> books = (List<String>)request.getAttribute("books"); %>
	
	<p>テーブルに保存されている本のタイトル一覧</p>
	<% for(String title: books) { %>
		<%= title %><br>
	<% } %>
</body>
</html>

次の箇所でサーブレットからデータを受け取っています。

<% List<String> books = (List<String>)request.getAttribute("books"); %>

そして、for文を使って、List内のタイトルを表示しています。

<% for(String title: books) { %>
	<%= title %><br>
<% } %>

動作確認

ではサーバーを立ち上げて、動作確認をしてみます。

データベースからデータを取得して、表示することが出来ました。

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

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

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

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