
今回の記事ではJavaのサーブレットとjspでPostgreSQLからデータを取得してjspで表示する方法について解説していきます。
データベースからデータを取得するのはWebアプリで必須となりますので、ぜひやり方を覚えてください!
プログラミングを学習しながら転職活動をしてエンジニアになろう
データを取得するテーブル
今回は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>
<% } %>
動作確認
ではサーバーを立ち上げて、動作確認をしてみます。

データベースからデータを取得して、表示することが出来ました。
挫折せずにプログラミングを学ぶためには?
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
【関連記事】Freeks評判、口コミ