Servletでデータベースからデータを取得する方法を解説!JDBCとSELECT文の基本を初心者向けに解説
新人
「Webアプリケーションって、ユーザー情報や商品情報を画面に表示していますよね。あれってどこからデータを持ってきているんですか?」
先輩
「多くの場合はデータベースから取得しています。JavaのServletでは、JDBCという仕組みを使ってデータベースに接続して、データを検索します。」
新人
「データベースから検索するって、具体的にはどういうことなんですか?」
先輩
「データベースには表のような形でデータが保存されています。その中から必要なデータを取り出すために、SELECT文というSQLを使います。ServletとJDBCを組み合わせることで、Javaプログラムからデータベース検索ができるようになります。」
新人
「なるほど。Servletからデータベースを検索して、結果を画面に表示する仕組みなんですね。」
先輩
「その通りです。これからServletでデータベースからデータを取得する基本の仕組みを順番に説明していきます。」
1. Servletでデータベースからデータを取得するとは?(SELECT処理の基本)
JavaのWebアプリケーション開発では、データベースからデータを取得する処理が非常に重要になります。例えば、ログイン機能、商品一覧、ユーザー情報表示など、多くの機能はデータベース検索によって実現されています。
Servletでデータを取得するとは、Javaプログラムからデータベースに接続し、保存されているデータを読み取る処理のことです。データベースは、簡単に言えば大量の情報を整理して保存するための仕組みです。
例えば、ネットショップを考えてみましょう。商品名、価格、在庫数などの情報はすべてデータベースに保存されています。ユーザーが商品一覧ページを開いたとき、Servletがデータベースに問い合わせを行い、商品情報を取得して画面に表示します。
このときに使われるのがSQLというデータベース操作のための言語です。SQLの中でも特に重要なのがSELECT文です。SELECT文は、データベースからデータを検索して取得するための命令です。
つまり、Servletでデータベース検索を行う基本の流れは次のようになります。
一 データベースへ接続する
二 SQLのSELECT文を実行する
三 取得したデータをJavaで処理する
四 JSPなどで画面に表示する
この仕組みを理解すると、JavaのWebアプリケーション開発で多くの機能を作れるようになります。
2. Servlet × JDBCでデータ検索を行う仕組み
Javaでデータベースに接続するためには、JDBCという仕組みを使います。JDBCとは、Java Database Connectivityの略で、Javaからデータベースを操作するための標準的な仕組みです。
JDBCを使うことで、MySQLやPostgreSQLなどのデータベースとJavaプログラムを接続することができます。ServletとJDBCを組み合わせることで、Webアプリケーションからデータベース検索が可能になります。
JDBCでデータベース検索を行う基本的な流れは次の通りです。
一 JDBCドライバを読み込む
二 データベースへ接続する
三 SQLのSELECT文を準備する
四 SQLを実行する
五 検索結果を取得する
それでは、実際にServletでデータベースからユーザー情報を取得する簡単なサンプルコードを見てみましょう。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UserListServlet")
public class UserListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
Statement stmt = conn.createStatement();
String sql = "SELECT id, name FROM users";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " : " + name);
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードでは、Servletからデータベースへ接続し、usersテーブルのデータを検索しています。そして、取得したデータを一件ずつ取り出して処理しています。
ResultSetというクラスは、SQLの検索結果を格納するためのものです。ResultSetを使うことで、データベースのデータを一行ずつ読み取ることができます。
3. データベースからデータを取得するSELECT文の基本構文
データベースからデータを取得するために使われるSQLがSELECT文です。SELECT文は、データベース検索の中でも最も基本的で重要な命令です。
SELECT文の基本構文は次のようになります。
SELECT 列名
FROM テーブル名
WHERE 条件
この構文を簡単に説明すると次のようになります。
| キーワード | 役割 |
|---|---|
| SELECT | 取得したいデータの列を指定する |
| FROM | データを取得するテーブルを指定する |
| WHERE | 検索条件を指定する |
例えば、ユーザーの名前だけを取得したい場合は次のようなSQLになります。
SELECT name
FROM users
また、特定のユーザーだけを検索する場合はWHERE句を使います。
SELECT name
FROM users
WHERE id = 1
このようにSELECT文を使うことで、データベースから必要なデータだけを取り出すことができます。ServletとJDBCを組み合わせることで、このSQLをJavaプログラムから実行できるようになります。
Webアプリケーション開発では、ログイン処理、検索機能、商品一覧表示、会員情報表示など、多くの機能でSELECT文が使われています。そのため、ServletとJDBCによるデータベース検索の仕組みを理解することは、Javaのサーバーサイド開発を学ぶうえでとても重要です。
4. ServletでSELECTを実行する基本的なプログラム構成
JavaのWebアプリケーション開発では、Servletからデータベース検索を行う処理が頻繁に登場します。ログイン機能、会員情報表示、商品一覧ページなど、多くの機能はデータベース検索によって実現されています。そのため、ServletでSELECT文を実行する基本的なプログラム構成を理解することは、Javaサーバーサイド開発において非常に重要です。
Servletからデータベース検索を行う場合、一般的にはJDBCを利用してデータベース接続を行います。そしてSQLのSELECT文を実行し、その結果をJavaのプログラムで処理します。検索結果はResultSetというクラスに格納され、Javaから順番に読み取ることができます。
ServletでSELECT文を実行する基本的な流れは次のようになります。
一 JDBCドライバを読み込む
二 データベースへ接続する
三 SQLのSELECT文を作成する
四 SQLを実行する
五 ResultSetから検索結果を取得する
六 必要に応じて画面表示へ渡す
この流れは多くのJavaデータベース処理で共通しており、ServletとJDBCを使ったデータベース検索の基本パターンとも言えます。特にSELECT文の実行とResultSetの処理は、JavaのWebシステム開発で繰り返し登場する重要な処理です。
また、実際のWebアプリケーションでは、Servletでデータを取得してJSPへ渡し、画面に表示するという構成がよく使われます。この構成を理解すると、JavaのMVCモデルの基本的な考え方も理解しやすくなります。
5. JDBCを使ってデータベースからデータを取得するServletの実装例
それでは実際に、ServletでJDBCを使ってデータベースからユーザー情報を取得するサンプルプログラムを見てみましょう。この例では、usersテーブルからユーザー一覧を取得する処理を実装しています。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UserSearchServlet")
public class UserSearchServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
stmt = conn.createStatement();
String sql = "SELECT id, name, email FROM users";
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println(id + " : " + name + " : " + email);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
このプログラムでは、まずJDBCドライバを読み込み、その後データベースへ接続しています。そしてStatementを作成し、SELECT文を実行しています。executeQueryというメソッドを使うことで、SQLの検索処理を実行することができます。
executeQueryメソッドの戻り値はResultSetです。このResultSetの中には、SQL検索の結果が保存されています。Javaプログラムでは、このResultSetを使って一行ずつデータを取得していきます。
例えばユーザー管理システムでは、ユーザー一覧を取得する処理や、特定ユーザーの情報を検索する処理などでこのようなServletとJDBCの組み合わせが利用されます。JavaのWeb開発では、データベース検索処理を正しく実装できることが重要なスキルになります。
6. ResultSetを使った検索結果データの取得と画面表示
SQLのSELECT文を実行すると、検索結果はResultSetというオブジェクトに格納されます。ResultSetは、データベース検索の結果を一行ずつ読み取るためのクラスです。
ResultSetを使う場合は、nextメソッドを使って次の行へ移動しながらデータを取得します。nextメソッドは、次のデータが存在する場合に真を返す仕組みになっています。そのため、while文と組み合わせることで、検索結果をすべて処理することができます。
次の例では、ResultSetから取得したユーザー情報をJSPへ渡し、画面表示する基本的な流れを示しています。Servletでは検索処理を行い、その結果をリクエスト属性としてJSPへ渡します。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/UserListViewServlet")
public class UserListViewServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ArrayList<String> userList = new ArrayList<>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
Statement stmt = conn.createStatement();
String sql = "SELECT name FROM users";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
String name = rs.getString("name");
userList.add(name);
}
request.setAttribute("users", userList);
request.getRequestDispatcher("/userList.jsp").forward(request, response);
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
次に、Servletから受け取ったデータをJSPで表示する例を見てみましょう。JSPではリクエスト属性からデータを取得し、画面に一覧表示することができます。
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.ArrayList" %>
<html>
<head>
<title>ユーザー一覧</title>
</head>
<body>
<h2>ユーザー一覧</h2>
<%
ArrayList<String> users = (ArrayList<String>) request.getAttribute("users");
for(String name : users){
%>
<p><%= name %></p>
<%
}
%>
</body>
</html>
このように、Servletではデータベース検索を担当し、JSPでは画面表示を担当する構成が一般的です。この仕組みを理解することで、JavaのWebアプリケーションにおけるデータ取得処理と画面表示処理を分離して設計できるようになります。
JavaのServletとJDBCを組み合わせたデータベース検索は、ログイン認証システム、会員管理システム、商品一覧表示機能など、多くのWebシステムで利用されています。そのため、ResultSetの扱い方やServletからJSPへのデータ受け渡しの仕組みを理解することは、実践的なJava Web開発スキルを身につけるうえで非常に重要です。
7. Servletでデータ検索処理を実装するメリット
JavaのWebアプリケーション開発において、ServletとJDBCを組み合わせたデータベース検索処理は非常に重要な役割を持っています。特にSELECT文を利用したデータ取得処理は、ユーザー管理システム、商品検索システム、会員情報表示など、ほとんどすべてのWebサービスで利用されている基本機能です。
Servletでデータベース検索処理を実装する最大のメリットは、Javaプログラムから直接データベースを操作できることです。これにより、ユーザーの入力内容に応じて柔軟に検索条件を変更することができ、さまざまな検索機能を実装することが可能になります。
例えば、商品検索機能を考えてみましょう。ユーザーが商品名を入力すると、その条件に一致する商品だけをデータベースから検索して表示する必要があります。このような処理は、ServletでSQLのSELECT文を動的に作成することで実現できます。
また、Servletでデータ検索処理を実装することで、Webアプリケーションの構造を整理しやすくなるというメリットもあります。一般的なJavaのWeb開発では、Servletがデータ処理を担当し、JSPが画面表示を担当する構成がよく使われます。この構成はMVCモデルの考え方に近く、システムの役割分担が明確になります。
一 サーバー側で安全にデータ検索処理を実行できる
二 ユーザーの入力内容に応じて検索条件を変更できる
三 データベースと画面表示の役割を分離できる
四 JavaのWebアプリケーション構造を整理しやすい
このように、Servletを使ったデータベース検索処理は、実用的なWebアプリケーションを開発するうえで欠かせない技術です。特に業務システムでは、大量のデータを検索して表示する処理が多く存在するため、SELECT文を使ったデータ取得処理を理解することが非常に重要になります。
さらに、ServletとJDBCを利用することで、データベースの種類が変わっても基本的なプログラム構造を維持することができます。MySQLやPostgreSQLなど、さまざまなデータベースで同じような仕組みを利用できるため、Javaのデータベース処理は非常に汎用性が高いと言えます。
8. ServletのSELECT処理でよくあるエラーと注意点(SQL・接続・例外処理)
Servletでデータベース検索処理を実装する際には、いくつか注意しなければならないポイントがあります。特に初心者がつまずきやすいのが、SQL文の記述ミス、データベース接続の設定ミス、そして例外処理の不足です。
まず最も多いエラーが、SQL文の書き間違いです。SELECT文の構文が正しくない場合、データベースからエラーが返され、プログラムが正常に動作しなくなります。例えばテーブル名や列名を間違えると、データを取得することができません。
String sql = "SELECT name FROM user";
ResultSet rs = stmt.executeQuery(sql);
この例では、テーブル名が正しくない場合、SQLエラーが発生します。実際のテーブル名がusersである場合は、SQL文を正しく修正する必要があります。データベース検索処理では、SQL文の正確な記述が非常に重要です。
次に注意する必要があるのが、データベース接続の設定です。接続先のURL、ユーザー名、パスワードが正しく設定されていない場合、データベースへ接続することができません。
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
この接続情報が正しくない場合、接続エラーが発生します。特にポート番号、データベース名、認証情報などは正確に設定する必要があります。
さらに重要なのが、例外処理の実装です。データベース処理では、ネットワークエラー、SQLエラー、接続エラーなど、さまざまな問題が発生する可能性があります。そのため、try文とcatch文を使った例外処理を適切に実装することが重要です。
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledb",
"root",
"password");
Statement stmt = conn.createStatement();
String sql = "SELECT id, name FROM users";
ResultSet rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
また、データベース処理ではリソースの解放も非常に重要です。ResultSet、Statement、Connectionなどのオブジェクトを閉じずに放置すると、サーバーのメモリや接続数を消費してしまいます。長時間動作するWebアプリケーションでは、このようなリソース管理がシステムの安定性に大きく影響します。
そのため、データベース処理が終了したら必ずcloseメソッドを使ってリソースを解放することが推奨されています。実務の開発では、finallyブロックや自動リソース管理の仕組みを利用して、確実にリソースを解放する設計がよく採用されています。
9. Servletでのデータベース検索処理(SELECT)の重要ポイントまとめ
JavaのServletを利用したデータベース検索処理は、Webアプリケーション開発の基礎となる重要な技術です。特にSQLのSELECT文を利用したデータ取得処理は、多くのシステムで繰り返し利用される基本機能となっています。
ServletとJDBCを組み合わせることで、Javaプログラムからデータベースに接続し、SQL文を実行して検索結果を取得することができます。この仕組みによって、ユーザー情報表示、商品検索機能、ログイン認証処理など、さまざまなWeb機能を実装することが可能になります。
Servletによるデータベース検索処理の基本的な流れは次の通りです。
一 JDBCドライバを読み込む
二 データベースへ接続する
三 SQLのSELECT文を作成する
四 executeQueryで検索処理を実行する
五 ResultSetから検索結果を取得する
六 必要に応じて画面表示へ渡す
この流れを理解することで、JavaのWebアプリケーションにおけるデータ取得処理の仕組みを体系的に理解することができます。また、ServletとJSPを組み合わせた構成を採用することで、データ処理と画面表示を分離した設計を実現できます。
さらに、実務のシステム開発では、検索条件の追加、ページング処理、大量データの取得など、より高度なデータベース検索処理が必要になります。そのため、基本となるSELECT文の仕組みとResultSetの扱い方をしっかり理解しておくことが重要です。
Javaのサーバーサイド開発では、ServletとJDBCによるデータベース検索処理が長年利用されており、現在でも多くの業務システムで採用されています。これらの技術を理解することで、実践的なJava Web開発スキルを身につけることができるようになります。