teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

DAO、とShowAllSurveyクラスを少し書き換えました

2020/03/23 03:08

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,11 @@
1
- 別のクラスでhtmlを使い作ったアンケートフォームからアンケートを記入し、その結果を別のページ(ブラウザ?)で以下のように、順番に連続にテーブルのように表示するようにしたいです。
1
+ 別のクラスでhtmlを使い作ったアンケートフォームからアンケートを記入し、その結果を別のページ(ブラウザ?)で以下のように表示するようにしたいです。
2
- 例えば
3
2
  名前  性別  満足度  意見    時
4
3
  ーーーーーーーーーーーーーーーーーーーーーーーーー
5
4
  モコ   2   4   楽しかった 2020/01/01
6
5
  ーーーーーーーーーーーーーーーーーーーーーーーーー
7
6
  ポチ   1   2   疲れた   2020/03/15
8
- ーーーーーーーーーーーーーーーーーーーーーーーーー
7
+ ーーーーーーーーーーーーーーーーーーーーーーーーー           
9
-
10
-
11
- ・               
12
- 、とこんな感じに順番に連続で表として表示されるようにしたいです。
8
+ 、とこんな感じに結果を表として表示されるようにしたいです。
13
9
  以下ArrayListを使ってやってみましたが、難しかったです…
14
10
  どのように書けばうまくいくでしょうか。。。
15
11
  ```java
@@ -87,8 +83,7 @@
87
83
  System.out.println( " <th>年齢</th> "); // thタグ:見出しを表す(2列目)
88
84
  System.out.println( " <th>性別</th> "); // thタグ:見出しを表す(3列目)
89
85
  System.out.println( " <th>満足度</th> "); // thタグ:見出しを表す(4列目)
90
- System.out.println( " <th>ご意見・ご感想</th> "); // thタグ:見出しを表す(5列目
86
+ System.out.println( " <th>ご意見・ご感想</th> "); // thタグ:見出しを表す(5列目
91
- System.out.println( " <th>回答時間</th> "); // thタグ:見出しを表す(6列目)
92
87
  System.out.println( " </tr> "); // trタグ(閉じ)
93
88
 
94
89
  for (int i = 0; i < postContentList.size(); i++) {
@@ -117,9 +112,45 @@
117
112
  ```
118
113
  【DAO】
119
114
  ```java
120
- public static String COMMA = ","; //コンマ(定数)
121
- public void doSelect(SurveyDto dto) {
115
+ package work;
122
116
 
117
+ import java.sql.Connection;
118
+ import java.sql.DriverManager;
119
+ import java.sql.PreparedStatement;
120
+ import java.sql.ResultSet;
121
+ import java.sql.SQLException;
122
+
123
+ /**----------------------------------------------------------------------*
124
+ *SurveyDaoメソッド
125
+ *----------------------------------------------------------------------**/
126
+ public class SurveyDao {
127
+ //-------------------------------------------
128
+ //データベースへの接続情報
129
+ //-------------------------------------------
130
+
131
+ //JDBCドライバの相対パス
132
+ //※バージョンによって変わる可能性があります(MySQL5系の場合は「com.mysql.jdbc.Driver」)
133
+ String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
134
+
135
+ //接続先のデータベース
136
+ //※データベース名が「test_db」でない場合は該当の箇所を変更してください
137
+ String JDBC_URL = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false";
138
+
139
+ //接続するユーザー名
140
+ //※ユーザー名が「test_user」でない場合は該当の箇所を変更してください
141
+ String USER_ID = "test_user";
142
+
143
+ //接続するユーザーのパスワード
144
+ //※パスワードが「test_pass」でない場合は該当の箇所を変更してください
145
+ String USER_PASS = "test_pass";
146
+
147
+ /**----------------------------------------------------------------------*
148
+ *doSelectメソッド
149
+ *----------------------------------------------------------------------**/
150
+
151
+ public static String COMMA = ","; //コンマ(定数)
152
+ public boolean doSelect() {
153
+
123
154
  //-------------------------------------------
124
155
  //データベースへの接続情報
125
156
  //-------------------------------------------
@@ -155,6 +186,7 @@
155
186
  Connection con = null ; // Connection(DB接続情報)格納用変数
156
187
  PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数
157
188
  ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数
189
+ boolean isSuccess = true ;
158
190
 
159
191
  try {
160
192
  //-------------------------------------------
@@ -168,16 +200,14 @@
168
200
 
169
201
  //SQL文の生成(SELECT)
170
202
  StringBuffer buf = new StringBuffer() ;
171
- buf.append(" SELECT ");
203
+ buf.append(" SELECT ");
172
- buf.append(" name , ");
204
+ buf.append(" NAME , ");
173
- buf.append(" age , ");
205
+ buf.append(" AGE , ");
174
- buf.append(" sex , ");
206
+ buf.append(" SEX , ");
175
- buf.append(" satisfaction_level , ");
207
+ buf.append(" SATISFACTION_LEVEL , ");
176
- buf.append(" message ");
208
+ buf.append(" MESSAGE ");
177
- buf.append(" FROM ");
209
+ buf.append(" FROM ");
178
- buf.append(" survey ");
210
+ buf.append(" SURVEY ");
179
- buf.append(" ORDER BY ");
180
- buf.append(" name ");
181
211
 
182
212
  //PreparedStatementオブジェクトを生成&発行するSQLをセット
183
213
  ps = con.prepareStatement(buf.toString());
@@ -204,23 +234,40 @@
204
234
  System.out.println(rsbuf.toString());
205
235
  }
206
236
 
237
+ //SQL文の実行
238
+ ps.executeUpdate();
239
+
207
240
  } catch (SQLException e) {
208
241
  e.printStackTrace();
209
242
 
243
+ //実行結果を例外発生として更新
244
+ isSuccess = false ;
245
+
210
246
  } finally {
211
247
  //-------------------------------------------
212
- // ⑤接続解除
248
+ //トランザクション終了
213
249
  //-------------------------------------------
250
+ if(isSuccess){
251
+ //明示的にコミットを実施
252
+ try {
253
+ con.commit();
254
+ } catch (SQLException e) {
255
+ e.printStackTrace();
256
+ }
214
257
 
258
+ }else{
215
- //ResultSetオブジェトの接続解除
259
+ //明示的にロールバッを実施
216
- if (rs != null) { //接続が確認できている場合のみ実施
217
260
  try {
218
- rs.close(); //接続の解除
261
+ con.rollback();
219
262
  } catch (SQLException e) {
220
263
  e.printStackTrace();
221
264
  }
222
265
  }
223
266
 
267
+ //-------------------------------------------
268
+ //接続の解除
269
+ //-------------------------------------------
270
+
224
271
  //PreparedStatementオブジェクトの接続解除
225
272
  if (ps != null) { //接続が確認できている場合のみ実施
226
273
  try {
@@ -238,53 +285,14 @@
238
285
  e.printStackTrace();
239
286
  }
240
287
  }
288
+
241
289
  }
290
+
291
+ //実行結果を返す
292
+ return isSuccess;
242
293
  }
243
- ```
244
- 【DAO】
245
- ```java
246
- package work;
247
294
 
248
- import java.sql.Timestamp;
249
- public class SurveyDto {
250
295
 
251
- //----------------------------------------------------------------
252
- //フィールド
296
+ }
253
- //----------------------------------------------------------------
254
- private String name ; //名前
255
- private int age ; //年齢
256
- private int sex ; //性別
257
- private int satisfactionLevel ; //満足度
258
- private String message ; //メッセージ
259
- private Timestamp time ; //更新時刻
260
297
 
261
- //----------------------------------------------------------------
262
- //getter/setter
263
- //----------------------------------------------------------------
264
-
265
- //getter/setter(対象フィールド:name)
266
- public String getName() { return name; }
267
- public void setName(String name) { this.name = name; }
268
-
269
- //getter/setter(対象フィールド:age)
270
- public int getAge() { return age; }
271
- public void setAge(int age) { this.age = age; }
272
-
273
- //getter/setter(対象フィールド:sex)
274
- public int getSex() { return sex; }
275
- public void setSex(int sex) { this.sex = sex; }
276
-
277
- //getter/setter(対象フィールド:satisfactionLevel)
278
- public int getSatisfactionLevel() { return satisfactionLevel; }
279
- public void setSatisfactionLevel(int satisfactionLevel) { this.satisfactionLevel = satisfactionLevel; }
280
-
281
- //getter/setter(対象フィールド:message)
282
- public String getMessage() { return message; }
283
- public void setMessage(String message) { this.message = message; }
284
-
285
- //getter/setter(対象フィールド:time)
286
- public Timestamp getTime() { return time; }
287
- public void setTime(Timestamp time) { this.time = time; }
288
-
289
- }
290
298
  ```

1

書いたとおもっていたコードが書けていなかったのでそこを書いてもう一度あげなおしました

2020/03/23 03:07

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,9 @@
16
16
  package work;
17
17
 
18
18
  import java.io.IOException;
19
+ import java.sql.Timestamp;
19
- import java.io.PrintWriter;
20
+ import java.util.ArrayList;
21
+ import java.util.List;
20
22
 
21
23
  import javax.servlet.ServletException;
22
24
  import javax.servlet.http.HttpServlet;
@@ -41,63 +43,68 @@
41
43
  //レスポンスの文字コードを設定
42
44
  response.setContentType("text/html;charset=UTF-8");
43
45
  //リクエスト(受信データ)の文字コードを設定
44
- request.setCharacterEncoding("UTF-8");
46
+ request.setCharacterEncoding("UTF-8");
45
47
 
46
- //ビジネスロジックを呼び出す
47
- BusinessLogic logic_ex = new BusinessLogic();
48
- logic_ex.executeSelectSurvey(dto);
49
-
50
48
  //リクエストパラメータを取得
51
49
  String name = request.getParameter("NAME"); //リクエストパラメータ(NAME)
52
- int age = Integer.parseInt( request.getParameter("AGE") ); //リクエストパラメータ(AGE)
50
+ int age = Integer.parseInt(request.getParameter("AGE")) ; //リクエストパラメータ(AGE)
53
51
  int sex = Integer.parseInt( request.getParameter("SEX") ); //リクエストパラメータ(SEX)
54
52
  int satisfactionLevel = Integer.parseInt( request.getParameter("SATISFACTION_LEVEL") ); //リクエストパラメータ(SATISFACTION_LEVEL)
55
53
  String message = request.getParameter("MESSAGE"); //リクエストパラメータ(MESSAGE)
54
+
55
+ //アンケートデータ(SurveyDto型)の作成
56
+ SurveyDto dto = new SurveyDto();
57
+ dto.setName( name );
58
+ dto.setAge( age );
59
+ dto.setSex( sex );
60
+ dto.setSatisfactionLevel( satisfactionLevel );
61
+ dto.setMessage( message );
62
+ dto.setTime( new Timestamp(System.currentTimeMillis()) ); //現在時刻を更新時刻として設定
56
63
 
64
+ //ビジネスロジックを呼び出す
65
+ BusinessLogic logic_ex = new BusinessLogic();
66
+ logic_ex.executeSelectSurvey(dto);
67
+
57
68
  //投稿内容のリスト
58
- List<String> postContentList = new ArrayList<String>();
69
+ List<String> postContentList = new ArrayList<String>() ;
59
- postContentList.add( name );
70
+ postContentList.add( name ) ;
60
- postContentList.add( age );
71
+ postContentList.add( "age" ) ;
61
- postContentList.add( sex );
72
+ postContentList.add( "sex" ) ;
62
- postContentList.add( satisfactionLevel );
73
+ postContentList.add( "satisfaction_level" ) ;
63
- postContentList.add( message );
74
+ postContentList.add( message ) ;
64
-
75
+
65
76
  //HTML文書(HTMLテーブル作成Sample画面)の出力
66
- out.println( "<html> ");
77
+ System.out.println( "<html>" ) ;
67
- out.println( "<head> ");
78
+ System.out.println( "<head>" ) ;
68
- out.println( " <title>アンケート回答一覧</title> ");
79
+ System.out.println( "<title>アンケート回答一覧</title>" ) ;
80
+ System.out.println( "</head>" ) ;
81
+ System.out.println( "<body>" ) ;
82
+ System.out.println( "<h2>アンケート回答一覧</h2>" ) ;
83
+
84
+ System.out.println( "< table class=\"list\" border=1 id=\"TABLE\"> " ) ;
85
+ System.out.println( " <tr bgcolor=\"#c0c0c0\"> "); // trタグ:1行分の情報を表す(1行目)
86
+ System.out.println( " <th>名前</th> "); // thタグ:見出しを表す(1列目)
87
+ System.out.println( " <th>年齢</th> "); // thタグ:見出しを表す(2列目)
88
+ System.out.println( " <th>性別</th> "); // thタグ:見出しを表す(3列目)
89
+ System.out.println( " <th>満足度</th> "); // thタグ:見出しを表す(4列目)
90
+ System.out.println( " <th>ご意見・ご感想</th> "); // thタグ:見出しを表す(5列目)
91
+ System.out.println( " <th>回答時間</th> "); // thタグ:見出しを表す(6列目)
69
- out.println( "</head> ");
92
+ System.out.println( " </tr> "); // trタグ(閉じ)
70
- out.println( "<body> ");
71
- out.println( " <h2>ご協力ありがとうございました!</h2> ");
72
93
 
73
- //--------------▼テーブルの作成▼--------------
74
-
75
- out.println( " <table class=\"list\" border=1 id=\"TABLE\"> "); //tableタグ:テーブル全体を表す
76
- out.println( " <tr bgcolor=\"#c0c0c0\"> "); // trタグ:1行分の情報を表す(1行目)
77
- out.println( " <th>名前</th> "); // thタグ:見出しを表す(1列目)
78
- out.println( " <th>年齢</th> "); // thタグ:見出しを表す(2列目)
79
- out.println( " <th>性別</th> "); // thタグ:見出しを表す(3列目)
80
- out.println( " <th>満足度</th> "); // thタグ:見出しを表す(4列目)
81
- out.println( " <th>ご意見・ご感想</th> "); // thタグ:見出しを表す(5列目)
82
- out.println( " <th>回答時間</th> "); // thタグ:見出しを表す(6列目)
83
- out.println( " </tr> "); // trタグ(閉じ)
84
-
85
94
  for (int i = 0; i < postContentList.size(); i++) {
86
-
87
- out.println(" <tr> "); // trタグ:1行分の情報を表す(2行目以降)
95
+ System.out.println(" <tr> ");
88
- out.println(" <td>" + postContentList.get(i) + "</td> "); // tdタグ:データを表す(1列目)
96
+ System.out.println(" <td>" + postContentList.get(i) + "</td> ");
89
- out.println(" </tr> "); // trタグ(閉じ)
97
+ System.out.println(" </tr> ");
98
+
90
99
  }
100
+
101
+ System.out.println(" </table> ");
102
+
103
+ System.out.println(" <a href=\"InputSurvey\">アンケート画面へ戻る</a> "); //前の画面に戻るリンクの設定
91
104
 
92
- out.println( " </table> "); //tableタグ(閉じ)
93
-
94
- //--------------▲テーブルの作成▲--------------
95
-
96
- out.println(" <a href=\"InputSurvey\">アンケート画面へ戻る</a> "); //前の画面に戻るリンクの設定
97
-
98
- out.println( "</body> ");
105
+ System.out.println( "</body> ");
99
- out.println( "</html> ");
106
+ System.out.println( "</html> ");
100
-
107
+
101
108
  }
102
109
 
103
110
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
@@ -106,6 +113,7 @@
106
113
  }
107
114
 
108
115
  }
116
+
109
117
  ```
110
118
  【DAO】
111
119
  ```java
@@ -238,11 +246,6 @@
238
246
  package work;
239
247
 
240
248
  import java.sql.Timestamp;
241
-
242
- /**----------------------------------------------------------------------*
243
- *■■■SurveyDtoクラス■■■
244
- *概要:DTO(「survey」テーブル)
245
- *----------------------------------------------------------------------**/
246
249
  public class SurveyDto {
247
250
 
248
251
  //----------------------------------------------------------------