オープンソースで作る Java+DB

特集 オープンソースで作るJava+DB
第2回 コードから学ぶJSPのデータベースアクセスの基礎 (3/8)

データベースに書き込むJSPファイルを作る

 リスト1の5行目では、次のように、SUBMITボタンが押された時に、「keijiwrite.jsp」ファイルが呼び出されるようになっている。

5: <FORM method="POST" action="keijiwrite.jsp">

 そこで、keijiwrite.jspファイルに、ユーザーが入力フォームに入力した文字列を読み取り、データベースに書き込む処理を実装していく。その「keijiwrite.jsp」ファイル内容は、リスト2のようになる。

リスト2 keijiwrite.jspファイル

1: <%@ page contentType="text/html; charset=EUC-JP" %>
2: <%@ page import="java.sql.*" %>
3: <%@ include file="code.jsp" %> <!-- 「JSPプログラミング入門」で作成したコード -->
4:
5: <%
6: // まずは、ユーザーが入力フォームに入力したデータを読み込む
7: String username, email, title, msg, host;
8:
9: username = jpn2unicode(request.getParameter("username"), "EUC-JP");
10: email = jpn2unicode(request.getParameter("email"), "EUC-JP");
11: title = jpn2unicode(request.getParameter("title"), "EUC-JP");
12: msg = jpn2unicode(request.getParameter("msg"), "EUC-JP");
13:
14: host = request.getRemoteHost();
15:
16: if ((username == null) || username.equals(""))
17: {
18: out.println("お名前が入力されていません");
19: return;
20: }
21: if ((title == null) || (title.equals(""))
22: {
23: out.println("タイトルが入力されていません");
24: return;
25: }
26: if ((msg == null) || msg.equals(""))
27: {
28: out.println("本文が入力されていません");
29: return;
30: }
31:
32: // データベースに書き込む処理
33: // PostgreSQLのドライバを読み込む
34: Class.forName("org.postgresql.Driver");
35:
36: Connection conn = null;
37: Statement stmt = null;
38:
39: try
40: {
41: // データベースに接続する
  conn = DriverManager.getConnection(
  "jdbc:postgresql:sampledb",
  "dbuser", // ユーザー名
  "mypassword"); // パスワード
42:
43: // クエリーを実行する
44: stmt = conn.createStatement();
45: int resultCnt =
  stmt.executeUpdate(
  "INSERT INTO Keiji " +
  " (name, email, title, body, host) " +
  " VALUES ('" + username + "'," +
  " '" + email + "'," +
  " '" + title + "'," +
  " '" + msg + "'," +
  " '" + host + "')");
46: }
47: catch (SQLException e)
48: {
49: // これはデバッグ用
50: // 本来なら、「データベースに書き込めません」などと
51: // エラーをユーザーに見せないように実装すること
52: out.println(e.getStackTrace().toString());
53: }
54: finally
55: {
56: // 接続を閉じる
57: if (stmt != null)
58: {
59: stmt.close();
60: }
61: if (conn != null)
62: {
63: conn.close();
64: }
65: }
66: %>
67: 書き込みました
68: </BODY>
69: </HTML>

 リスト2では、まず、6〜12行目の部分を注目してほしい。ここは、ユーザーが入力フォームに入力した文字列を取得している個所だ。連載「JSPプログラミング入門 第2回」で作成したcode.aspファイル内のjsp2unicodeメソッドを使いUnicodeに変換するという処理を行っている。この部分は、すでに説明済みなため、改めての説明を避ける。

6: // まずは、ユーザーが入力フォームに入力したデータを読み込む
7: String username, email, title, msg, host;
8:
9: username = jpn2unicode(request.getParameter("username"), "EUC-JP");
10: email = jpn2unicode(request.getParameter("email"), "EUC-JP");
11: title = jpn2unicode(request.getParameter("title"), "EUC-JP");
12: msg = jpn2unicode(request.getParameter("msg"), "EUC-JP");

 リスト2の14行目では、クライアントのIPアドレスを得ている。クライアントのIPアドレスは、次のように、getRemoteメソッドを使うことで得られるのだ。

14: host = request.getRemoteHost();

 続く16〜30行目の部分は、ユーザーが正しく入力フォームに文字列を入力してきたかをチェックしている個所だ。たとえば、名前が入力されているかどうかを調べる個所は、次のようになっている。

16: if ((username == null) || username.equals(""))
17: {
18: out.println("お名前が入力されていません");
19: return;
20: }

 この例のように、JSPでは、returnステートメントを使って戻ると、その時点でJSPプログラムの実行が終わる仕組みになっている。

One Point!

リスト2では、途中でreturnステートメントを使い、エラーがあるときには、そこでJSPのプログラムを終えるようにしているが、あまり好ましくない。なぜならば、returnステートメントを呼び出すと、その時点でJSPのプログラムが終了してしまうから、68行目や69行目にある、</BODY>や</HTML>などのHTMLの閉じタグがクライアントに送信されないためだ。

前のページ | 1 2 3 4 5 6 7 8 | 次のページへ

[大澤文孝,ITmedia]