SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

WTPではじめるサーバサイドJava入門

サーバサイドJava入門 Java DBによるデータベースアクセス

第8回 JSP/サーブレットからのデータベースアクセスの基本

新規・削除用サーブレットの作成

 続いて、新規レコードの作成やレコードの削除といった操作を行うためのサーブレットを作成します。これは、「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){ 略 }
}
web.xmlの<web-app>への登録
<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のいずれかを呼び出すようにしておきました。

図13 完成したindes.jspページ。IDによるデータの検索、新規追加、削除が行える。
図13 完成したindes.jspページ。IDによるデータの検索、新規追加、削除が行える。

まとめ

 ごく単純なものですが、SQLデータベースを利用するプログラムを作成しながらその基本を説明しました。特にSQL関係についてはごくざっと説明しただけですのでよく分からなかったかも知れません。SQLは、それ自体、かなり複雑で奥深いものです。ここで説明しきれるものではないので、それぞれで別途学習してください。

 今回は、Java DBを直接利用してデータベースアクセスを行いましたが、基本的な処理の方法はどのSQLデータベースでもほぼ同じです。使用するドライバークラス、アクセスのURLの指定方法などが異なるだけで、ConnectionStatementResultSetといったクラスの扱い方に違いはありません。Java DBでSQL利用の基本が分かったら、その他にどのようなSQLデータベースがあるか調べて挑戦してみるとよいでしょう。

 第1回から、8回にわたってサーバーサイドJavaの基本について解説をしてきました。とりあえず、サーバサイドJavaの基本である「JSP」「サーブレット」「データベースアクセス」の基本については一通り理解できたのではないでしょうか。サーバサイドの世界は非常に奥が深く、まだまだ未知の技術がたくさんあります。この連載で身につけた知識をもとに、更に新しい技術へと挑戦してみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
WTPではじめるサーバサイドJava入門連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1556 2007/08/14 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー