別のクラスでhtmlを使い作ったアンケートフォームからアンケートを記入し、その結果を別のページ(ブラウザ?)で以下のように表示するようにしたいです。
名前 性別 満足度 意見 時
ーーーーーーーーーーーーーーーーーーーーーーーーー
モコ 2 4 楽しかった 2020/01/01
ーーーーーーーーーーーーーーーーーーーーーーーーー
ポチ 1 2 疲れた 2020/03/15
ーーーーーーーーーーーーーーーーーーーーーーーーー
、とこんな感じに結果を表として表示されるようにしたいです。
以下ArrayListを使ってやってみましたが、難しかったです…
どのように書けばうまくいくでしょうか。。。
java
1package work; 2 3import java.io.IOException; 4import java.sql.Timestamp; 5import java.util.ArrayList; 6import java.util.List; 7 8import javax.servlet.ServletException; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13/**----------------------------------------------------------------------* 14 *■■■ShowAllSurveyクラス■■■ 15 *概要:サーブレット 16 *詳細:HTML文書(回答入力画面の結果)を出力する。 17 *----------------------------------------------------------------------**/ 18public class ShowAllSurvey extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 public ShowAllSurvey() { 22 super(); 23 } 24 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 28 //レスポンスの文字コードを設定 29 response.setContentType("text/html;charset=UTF-8"); 30 //リクエスト(受信データ)の文字コードを設定 31 request.setCharacterEncoding("UTF-8"); 32 33 //リクエストパラメータを取得 34 String name = request.getParameter("NAME"); //リクエストパラメータ(NAME) 35 int age = Integer.parseInt(request.getParameter("AGE")) ; //リクエストパラメータ(AGE) 36 int sex = Integer.parseInt( request.getParameter("SEX") ); //リクエストパラメータ(SEX) 37 int satisfactionLevel = Integer.parseInt( request.getParameter("SATISFACTION_LEVEL") ); //リクエストパラメータ(SATISFACTION_LEVEL) 38 String message = request.getParameter("MESSAGE"); //リクエストパラメータ(MESSAGE) 39 40 //アンケートデータ(SurveyDto型)の作成 41 SurveyDto dto = new SurveyDto(); 42 dto.setName( name ); 43 dto.setAge( age ); 44 dto.setSex( sex ); 45 dto.setSatisfactionLevel( satisfactionLevel ); 46 dto.setMessage( message ); 47 dto.setTime( new Timestamp(System.currentTimeMillis()) ); //現在時刻を更新時刻として設定 48 49 //ビジネスロジックを呼び出す 50 BusinessLogic logic_ex = new BusinessLogic(); 51 logic_ex.executeSelectSurvey(dto); 52 53 //投稿内容のリスト 54 List<String> postContentList = new ArrayList<String>() ; 55 postContentList.add( name ) ; 56 postContentList.add( "age" ) ; 57 postContentList.add( "sex" ) ; 58 postContentList.add( "satisfaction_level" ) ; 59 postContentList.add( message ) ; 60 61 //HTML文書(HTMLテーブル作成Sample画面)の出力 62 System.out.println( "<html>" ) ; 63 System.out.println( "<head>" ) ; 64 System.out.println( "<title>アンケート回答一覧</title>" ) ; 65 System.out.println( "</head>" ) ; 66 System.out.println( "<body>" ) ; 67 System.out.println( "<h2>アンケート回答一覧</h2>" ) ; 68 69 System.out.println( "< table class=\"list\" border=1 id=\"TABLE\"> " ) ; 70 System.out.println( " <tr bgcolor=\"#c0c0c0\"> "); // trタグ:1行分の情報を表す(1行目) 71 System.out.println( " <th>名前</th> "); // thタグ:見出しを表す(1列目) 72 System.out.println( " <th>年齢</th> "); // thタグ:見出しを表す(2列目) 73 System.out.println( " <th>性別</th> "); // thタグ:見出しを表す(3列目) 74 System.out.println( " <th>満足度</th> "); // thタグ:見出しを表す(4列目) 75 System.out.println( " <th>ご意見・ご感想</th> "); // thタグ:見出しを表す(5列目 76 System.out.println( " </tr> "); // trタグ(閉じ) 77 78 for (int i = 0; i < postContentList.size(); i++) { 79 System.out.println(" <tr> "); 80 System.out.println(" <td>" + postContentList.get(i) + "</td> "); 81 System.out.println(" </tr> "); 82 83 } 84 85 System.out.println(" </table> "); 86 87 System.out.println(" <a href=\"InputSurvey\">アンケート画面へ戻る</a> "); //前の画面に戻るリンクの設定 88 89 System.out.println( "</body> "); 90 System.out.println( "</html> "); 91 92 } 93 94 protected void doPost(HttpServletRequest request, HttpServletResponse response) 95 throws ServletException, IOException { 96 doGet(request, response); 97 } 98 99} 100
【DAO】
java
1package work; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9/**----------------------------------------------------------------------* 10 *SurveyDaoメソッド 11 *----------------------------------------------------------------------**/ 12public class SurveyDao { 13 //------------------------------------------- 14 //データベースへの接続情報 15 //------------------------------------------- 16 17 //JDBCドライバの相対パス 18 //※バージョンによって変わる可能性があります(MySQL5系の場合は「com.mysql.jdbc.Driver」) 19 String DRIVER_NAME = "com.mysql.cj.jdbc.Driver"; 20 21 //接続先のデータベース 22 //※データベース名が「test_db」でない場合は該当の箇所を変更してください 23 String JDBC_URL = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; 24 25 //接続するユーザー名 26 //※ユーザー名が「test_user」でない場合は該当の箇所を変更してください 27 String USER_ID = "test_user"; 28 29 //接続するユーザーのパスワード 30 //※パスワードが「test_pass」でない場合は該当の箇所を変更してください 31 String USER_PASS = "test_pass"; 32 33 /**----------------------------------------------------------------------* 34 *doSelectメソッド 35 *----------------------------------------------------------------------**/ 36 37 public static String COMMA = ","; //コンマ(定数) 38 public boolean doSelect() { 39 40 //------------------------------------------- 41 //データベースへの接続情報 42 //------------------------------------------- 43 44 //JDBCドライバの相対パス 45 //※バージョンによって変わる可能性があります(MySQL5系の場合は「com.mysql.jdbc.Driver」) 46 String driverName = "com.mysql.cj.jdbc.Driver"; 47 48 //接続先のデータベース 49 //※データベース名が「test_db」でない場合は該当の箇所を変更してください 50 String jdbcUrl = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; 51 52 //接続するユーザー名 53 //※ユーザー名が「test_user」でない場合は該当の箇所を変更してください 54 String userId = "test_user"; 55 56 //接続するユーザーのパスワード 57 //※パスワードが「test_pass」でない場合は該当の箇所を変更してください 58 String userPass = "test_pass"; 59 60 //------------------------------------------- 61 //① JDBCドライバのロード 62 //------------------------------------------- 63 try { 64 Class.forName(driverName); //JDBCドライバをロード&接続先として指定 65 } catch (ClassNotFoundException e) { 66 e.printStackTrace(); 67 } 68 69 70 //JDBCの接続に使用するオブジェクトを宣言 71 //※finallyブロックでも扱うためtryブロック内で宣言してはいけないことに注意 72 Connection con = null ; // Connection(DB接続情報)格納用変数 73 PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数 74 ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数 75 boolean isSuccess = true ; 76 77 try { 78 //------------------------------------------- 79 // ②接続の確立(Connectionオブジェクトの取得) 80 //------------------------------------------- 81 con = DriverManager.getConnection(jdbcUrl, userId, userPass); 82 83 //------------------------------------------- 84 // ③SQL文の送信 & ④抽出結果の取得 85 //------------------------------------------- 86 87 //SQL文の生成(SELECT) 88 StringBuffer buf = new StringBuffer() ; 89 buf.append(" SELECT "); 90 buf.append(" NAME , "); 91 buf.append(" AGE , "); 92 buf.append(" SEX , "); 93 buf.append(" SATISFACTION_LEVEL , "); 94 buf.append(" MESSAGE "); 95 buf.append(" FROM "); 96 buf.append(" SURVEY "); 97 98 //PreparedStatementオブジェクトを生成&発行するSQLをセット 99 ps = con.prepareStatement(buf.toString()); 100 101 //SQL文の送信&抽出結果(ResultSetオブジェクト)の取得 102 rs = ps.executeQuery(); 103 104 //ResultSetオブジェクトから1レコードずつデータを取得&加工&表示する 105 while (rs.next()) { 106 107 //1レコード分のデータを取得&加工(各カラムをコンマ綴りで結合) 108 StringBuffer rsbuf = new StringBuffer(); 109 rsbuf.append(rs.getString("name")); 110 rsbuf.append(COMMA); 111 rsbuf.append(rs.getString("age")); 112 rsbuf.append(COMMA); 113 rsbuf.append(rs.getString("sex")); 114 rsbuf.append(COMMA); 115 rsbuf.append(rs.getString("satisfaction_level")); 116 rsbuf.append(COMMA); 117 rsbuf.append(rs.getString("message")); 118 119 //加工作成した1レコード分のデータを表示 120 System.out.println(rsbuf.toString()); 121 } 122 123 //SQL文の実行 124 ps.executeUpdate(); 125 126 } catch (SQLException e) { 127 e.printStackTrace(); 128 129 //実行結果を例外発生として更新 130 isSuccess = false ; 131 132 } finally { 133 //------------------------------------------- 134 //トランザクションの終了 135 //------------------------------------------- 136 if(isSuccess){ 137 //明示的にコミットを実施 138 try { 139 con.commit(); 140 } catch (SQLException e) { 141 e.printStackTrace(); 142 } 143 144 }else{ 145 //明示的にロールバックを実施 146 try { 147 con.rollback(); 148 } catch (SQLException e) { 149 e.printStackTrace(); 150 } 151 } 152 153 //------------------------------------------- 154 //接続の解除 155 //------------------------------------------- 156 157 //PreparedStatementオブジェクトの接続解除 158 if (ps != null) { //接続が確認できている場合のみ実施 159 try { 160 ps.close(); //接続の解除 161 } catch (SQLException e) { 162 e.printStackTrace(); 163 } 164 } 165 166 //Connectionオブジェクトの接続解除 167 if (con != null) { //接続が確認できている場合のみ実施 168 try { 169 con.close(); //接続の解除 170 } catch (SQLException e) { 171 e.printStackTrace(); 172 } 173 } 174 175 } 176 177 //実行結果を返す 178 return isSuccess; 179 } 180 181 182 } 183