新規・削除用サーブレットの作成
続いて、新規レコードの作成やレコードの削除といった操作を行うためのサーブレットを作成します。これは、「DBServlet」という名前で用意しておくことにしましょう。基本的なデータベースアクセスの処理はDBAccessに用意してありますから、サーブレットの処理は単にこれを呼び出すだけです。
package jp.codezine; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DBServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 今回は特になし } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Shift_JIS"); response.setContentType("text/html;charset=Shift_JIS"); String mode = request.getParameter("mode"); if (mode.equals("new")){ newRecord(request,response); } else if (mode.equals("remove")){ removeRecord(request,response); } response.sendRedirect("./index.jsp"); } public void newRecord(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); try { int n = Integer.parseInt(id); String nm = request.getParameter("name"); new DBAccess().addRecord(n,nm); } catch (NumberFormatException e) { e.printStackTrace(); } } public void removeRecord(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); try { int n = Integer.parseInt(id); new DBAccess().removeRecord(n); } catch (NumberFormatException e) { e.printStackTrace(); } } // 無効化処理 private String getSanitizedString(String s){ 略 } }
<servlet> <description>new DB servlet.</description> <display-name>NewDB</display-name> <servlet-name>NewDB</servlet-name> <servlet-class>jp.codezine.DBServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NewDB</servlet-name> <url-pattern>/dbserv</url-pattern> </servlet-mapping>
ここでは/dbservというURLでDBServletにアクセスされるようにしておきました。送信されたmodeパラメータの値をチェックし、必要に応じてnewRecord/removeRecordを呼び出しています。これらのメソッドでは、先に作成したDBAccessクラスのメソッドを呼び出して処理を行っています。DBAccessの内容が分かれば、ここでは特に説明の要はありませんね。
表示用JSPの作成
最後に、「index.jsp」にデータベース利用のための表示を作成しておきましょう。ここでは、新規登録・削除・検索のためのフォームを用意し、最後に検索されたレコードを一覧表示させています。
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<%@ page import="jp.codezine.*" %>
<%
String mode = request.getParameter("mode");
if (mode == null) mode = "";
DBAccess db = new DBAccess();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-31j">
<title>DB Test</title>
</head>
<body>
※データの検索<br>
<form method="post" action="./index.jsp">
<input type="hidden" name="mode" value="find">
ID:<input type="text" name="id">
<input type="submit">
</form>
<br><hr>
※新規データの登録<br>
<form method="post" action="./dbserv">
<input type="hidden" name="mode" value="new">
ID:<input type="text" name="id"><br>
名前:<input type="text" name="name">
<input type="submit">
</form>
<br><hr>
※データの削除<br>
<form method="post" action="./dbserv">
<input type="hidden" name="mode" value="remove">
ID:<input type="text" name="id">
<input type="submit">
</form>
<br><hr>
※レコード一覧<br>
<%
if (mode.equals("find")){
out.println(db.getFindRecord(request.getParameter("id")));
} else {
out.println(db.getAllRecord());
}
%>
</body>
</html>
各種のフォームは、それぞれサーブレットや「index.jsp」自身に送信をしています。非表示のフィールドにmodeというパラメータを用意しておき、これの値によって実行する処理が分かるようにしてあります。レコードの一覧表示は、mode.equals("find")の値によって、DBAccessのgetFindRecordまたはgetAllRecordのいずれかを呼び出すようにしておきました。

まとめ
ごく単純なものですが、SQLデータベースを利用するプログラムを作成しながらその基本を説明しました。特にSQL関係についてはごくざっと説明しただけですのでよく分からなかったかも知れません。SQLは、それ自体、かなり複雑で奥深いものです。ここで説明しきれるものではないので、それぞれで別途学習してください。
今回は、Java DBを直接利用してデータベースアクセスを行いましたが、基本的な処理の方法はどのSQLデータベースでもほぼ同じです。使用するドライバークラス、アクセスのURLの指定方法などが異なるだけで、Connection、Statement、ResultSetといったクラスの扱い方に違いはありません。Java DBでSQL利用の基本が分かったら、その他にどのようなSQLデータベースがあるか調べて挑戦してみるとよいでしょう。
第1回から、8回にわたってサーバーサイドJavaの基本について解説をしてきました。とりあえず、サーバサイドJavaの基本である「JSP」「サーブレット」「データベースアクセス」の基本については一通り理解できたのではないでしょうか。サーバサイドの世界は非常に奥が深く、まだまだ未知の技術がたくさんあります。この連載で身につけた知識をもとに、更に新しい技術へと挑戦してみてください。
