データの取得

この節では、SQL文の実行結果を操作する方法を見てみましょう。

○ ファイル

ConnectionTest.javaファイルをコピーして、プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 SelectServlet
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ プログラム

doGetメソッドを追加して、次のようにプログラムを入力してください。

SelectServlet.java

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import javax.servlet.RequestDispatcher;
  9. import javax.servlet.ServletContext;
  10. import javax.servlet.ServletException;
  11. import javax.servlet.annotation.WebServlet;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. @WebServlet("/selectdata")
  16. public class SelectServlet extends HttpServlet {
  17.     @Override
  18.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  19.         String message = null;
  20.         Connection con = null;
  21.         ArrayList<String[]> list = null;
  22.         
  23.         try{
  24.             //JDBCドライバクラスの指定
  25.             String drivername = "com.mysql.jdbc.Driver";
  26.             
  27.             //データベースを指定
  28.             String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
  29.             
  30.             //ユーザー名
  31.             String username = "root";
  32.             
  33.             //パスワード
  34.             String password = "";
  35.             
  36.             //指定したドライバクラスを読み込み
  37.             Class.forName(drivername);
  38.             
  39.             //データベースに接続
  40.             con = DriverManager.getConnection(url, username, password);
  41.             
  42.             //Statementオブジェクトを生成
  43.             Statement st = con.createStatement();
  44.             
  45.             //SQL文を生成
  46.             String sql = "SELECT * FROM users";
  47.             
  48.             //SQL文を実行
  49.             ResultSet rs = st.executeQuery(sql);
  50.             
  51.             //結果を格納するArrayListオブジェクトを用意
  52.             list = new ArrayList<String[]>();
  53.             
  54.             //結果を取得する
  55.             while(rs.next()){
  56.                 String[] data = new String[4];
  57.             
  58.                 data[0] = rs.getString("id");
  59.                 data[1] = rs.getString("user_name");
  60.                 data[2] = rs.getString("password");
  61.                 data[3] = rs.getString("name");
  62.                 list.add(data);
  63.             }
  64.             
  65.             //ResutlSetオブジェクトを切断
  66.             rs.close();
  67.         }catch(Exception e){
  68.             //エラーメッセージをセット
  69.             message = "データベースに接続できませんでした。";
  70.         }finally{
  71.             try{
  72.                 //データベースに接続されていれば切断する
  73.                 if(con != null){
  74.                     con.close();
  75.                 }
  76.             }catch(Exception e){
  77.                 message = "エラーが発生しました。";
  78.             }
  79.         }
  80.         
  81.         //リクエストオブジェクトにデータをセットする
  82.         req.setAttribute("Users", list);
  83.         req.setAttribute("Message", message);
  84.         
  85.         //サーブレットコンテキストを取得する
  86.         ServletContext sc = this.getServletContext();
  87.         
  88.         //リクエストディスパッチャーオブジェクトを取得する
  89.         RequestDispatcher rd = sc.getRequestDispatcher("/SelectData.jsp");
  90.         
  91.         //違うページに転送する
  92.         rd.forward(req, resp);
  93.     }
  94. }

○ ファイル

データを表示するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。

ファイル名 SelectData.jsp

サンプルダウンロード

○ プログラム

次のようにプログラムを入力してください。

SelectData.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <%@ page import="java.util.ArrayList" %>
  4. <%
  5.     //リクエストオブジェクトからデータを取得する
  6.     ArrayList<String[]> data = (ArrayList<String[]>)request.getAttribute("Users");
  7.     String message = (String)request.getAttribute("Message");
  8. %>
  9. <!DOCTYPE html>
  10. <html>
  11. <head>
  12. <meta charset="UTF-8">
  13. <title>結果表示</title>
  14. </head>
  15. <body>
  16.     <h2>ユーザー情報一覧</h2>
  17. <%
  18. if(message != null){
  19. %>
  20.     <%= message %>
  21. <%
  22. }else{
  23. %>
  24.     <table border="1">
  25.         <tr>
  26.             <th>ユーザーID</th>
  27.             <th>ユーザー名</th>
  28.             <th>パスワード</th>
  29.             <th>氏名</th>
  30.         </tr>
  31.     <%
  32.     for(String[] dt : data){
  33.     %>
  34.         <tr>
  35.             <td><%= dt[0] %></td>
  36.             <td><%= dt[1] %></td>
  37.             <td><%= dt[2] %></td>
  38.             <td><%= dt[3] %></td>
  39.         </tr>
  40.     <%
  41.     }
  42.     %>
  43.     </table>
  44.     <%
  45.     }
  46. %>
  47. </body>
  48. </html>

○ 実行結果

次のURLを入力して実行してみましょう。

http://localhost:8080/WebApp/selectdata

実行結果
実行結果

○ 解説

SelectServlet.javaでは、データベースに接続し、データを取得します。データを取得するために47行目で、ConnectionインタフェースのcreateStatementメソッドを使って、データベースにSQL文を発行するオブジェクトを取得します。そして53行目で、StatementインタフェースのexecuteQueryメソッドを使ってデータを抽出します。その際、引数にSQL文を指定します。検索結果のResultSetオブジェクトが返されるので、変数に格納しています。

59行目から67行目までで、検索結果を順番に取り出して、配列に格納しています。この配列(ArrayList)は表示するときに使用しています。86行目から96行目で、その配列をHttpServletRequestオブジェクトにセットし、JSPに転送しています。

SelectData.jspでは、6行目で保存しておいた配列(ArrayList)を取得しています。32行目から41行目で、配列をループして、1件1行のテーブルで表示しています。

前へ   次へ