Servlet日記(1999/11/12)

本日の成果

 前々回の内容を基に、パラメータ付き問い合わせを試してみました。Statementの代わりにPreparedStatementを使ってSQL文を用意しておき、そのsetXXXメソッドによりパラメータを設定します。?のところが置き換わるようです。ただ、この例ではパラメータが一つなので誤解はないのですが、パラメータが複数になると何番目のパラメータか数える必要があり、どうしてパラメータに名前を付けられないのか疑問です。ここでは、BELONGの値が一致するものを検索します。もしBELONGの値が指定されなければ、今まで通り、全データを取ってきます。後の処理は、今までと同じです。

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String id, name, belong;
    ResultSet rs;
    Statement s;
    PreparedStatement ps;

    String dbBelong = request.getParameter("belong");

    try {
      if (dbBelong == null || dbBelong.equals("")) {
        s = con.createStatement();
        rs = s.executeQuery("SELECT ID, NAME, BELONG FROM SHAIN");
      } else {
        ps = con.prepareStatement(
          "SELECT ID, NAME, BELONG FROM SHAIN WHERE BELONG LIKE ?");
        ps.setString(1, dbBelong);
        rs = ps.executeQuery();
      }

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<html>");
      out.println("<head><title>Servlet1</title></head>");
      out.println("<body>");
      out.println("<table border>");

      while (rs.next()) {
        id = rs.getString("ID");
        name = rs.getString("NAME");
        belong = rs.getString("BELONG");
        out.println("<tr><td>" + id + "<td>" + name + "<td>" + belong);
      }

      out.println("</table>");
      out.println("</body></html>");
      out.close();

      rs.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

本日の教訓

 パラメータ付き問い合わせを行うには、PreparedStatementを使おう。パラメータの順番を数え間違えないように注意!

Servlet日記(1999/11/07) Servlet日記の目次 Servlet日記(1999/11/13)