質問編集履歴

3

try/catchを消しthrow e; throws SQLException を追加しましたが、Servlet内のthrows句でエラーが出てしまいます。調べましたが解決方法がわかりませんでした。

2020/06/22 11:53

投稿

yyuukkii
yyuukkii

スコア7

test CHANGED
File without changes
test CHANGED
@@ -24,46 +24,6 @@
24
24
 
25
25
 
26
26
 
27
-
28
-
29
- ServletクラスとDaoクラスの(SQLException e)e.printStackTrace();の下にthrow e;を加えました。
30
-
31
- 変更後エラーが表示されるようになりました。
32
-
33
-
34
-
35
- 500エラー
36
-
37
- javax.servlet.ServletException: サーブレットの実行により例外を投げました
38
-
39
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
40
-
41
-
42
-
43
-
44
-
45
- 根本原因
46
-
47
- java.lang.Error: Unresolved compilation problem:
48
-
49
- 処理されない例外の型 SQLException
50
-
51
-
52
-
53
- servlet.ListServlet.doGet(ListServlet.java:35)
54
-
55
- javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
56
-
57
- javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
58
-
59
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
60
-
61
-
62
-
63
- 【コンソールのエラー】
64
-
65
- 重大: パス[/Manager]を持つコンテキスト内のサーブレット[servlet.ListServlet]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。
66
-
67
27
 
68
28
 
69
29
  javaを始めたばかりで検討が付きません。
@@ -240,7 +200,7 @@
240
200
 
241
201
 
242
202
 
243
- public List<EmployeeListModel> findAll() {
203
+ public List<EmployeeListModel> findAll() throws SQLException{ //SQLExceptionを入れないと注意が出る
244
204
 
245
205
 
246
206
 
@@ -318,7 +278,7 @@
318
278
 
319
279
  e.printStackTrace();
320
280
 
321
-              throw e; //追加しました。
281
+              throw e; //追加しました。findAll()にthrows句を置かないとここで注意がでます。
322
282
 
323
283
  } catch (Exception e) {
324
284
 
@@ -412,156 +372,142 @@
412
372
 
413
373
 
414
374
 
415
-
375
+ //SQLExceptionをいれると- 例外 SQLException は HttpServlet.doGet(HttpServletRequest,     //HttpServletResponse) にある throws節と矛盾します
376
+
416
-
377
+ // javax.servlet.http.HttpServlet.doGet をオーバーライドしますとでてしまいます。
378
+
417
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
379
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws SQLExcepion ServletException, IOException {
418
380
 
419
381
 
420
382
 
421
383
  EmployeeListDao dao = new EmployeeListDao();
422
384
 
423
- List<EmployeeListModel> lists = null;
385
+ List<EmployeeListModel> lists = dao.findAll();
386
+
424
-
387
+ request.setAttribute("lists", lists);
388
+
425
-          
389
+ RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/List.jsp");
390
+
426
-
391
+ dispatcher.forward(request, response);
392
+
393
+ }
394
+
395
+
396
+
397
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
398
+
399
+
400
+
401
+ }
402
+
403
+
404
+
405
+ }
406
+
407
+ ```
408
+
409
+
410
+
411
+ DB接続共通処理ConnectionUtil
412
+
413
+
414
+
415
+ ```
416
+
417
+
418
+
419
+ package dao;
420
+
421
+
422
+
423
+ import java.sql.Connection;
424
+
425
+ import java.sql.DriverManager;
426
+
427
+ import java.sql.PreparedStatement;
428
+
429
+ import java.sql.SQLException;
430
+
431
+
432
+
433
+ public class ConnectionUtil {
434
+
435
+
436
+
427
- //ここにもSQLException追加しない×マクがついてしまうので追加しました。
437
+ //JDBCドライバー接続先デタベース名を代入
438
+
428
-
439
+ private static String driverName = "com.mysql.cj.jdbc.Driver";
440
+
441
+ private static String url = "jdbc:mysql://localhost:3306/company?characterEncoding=UTF8&serverTimezone=JST";
442
+
443
+
444
+
445
+ //userアカウントを代入
446
+
447
+ private static final String user = "root";
448
+
449
+ private static final String pass = "Sy";
450
+
451
+
452
+
453
+ //DB接続のメソッド
454
+
455
+ public Connection getConnection() {
456
+
429
- try {
457
+ try {
430
-
458
+
431
- lists = dao.findAll();
459
+ Class.forName(driverName);
460
+
432
-
461
+ return DriverManager.getConnection(url, user, pass);
462
+
433
- } catch (SQLException e) {
463
+ } catch (Exception e) {
434
-
435
-
436
-
464
+
437
- e.printStackTrace();
465
+ throw new IllegalArgumentException(e);
438
466
 
439
467
  }
440
468
 
441
- request.setAttribute("lists", lists);
442
-
443
- RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/List.jsp");
444
-
445
- dispatcher.forward(request, response);
446
-
447
469
  }
448
470
 
449
471
 
450
472
 
473
+ //DB close処理
474
+
451
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
475
+ public void allClose(PreparedStatement ps, Connection conn) {
476
+
452
-
477
+ if (ps != null) {
478
+
453
-
479
+ try {
480
+
481
+ ps.close();
482
+
483
+ } catch (SQLException e) {
484
+
485
+ e.printStackTrace();
486
+
487
+ }
488
+
489
+ }
490
+
491
+ if (conn != null) {
492
+
493
+ try {
494
+
495
+ conn.close();
496
+
497
+ } catch (SQLException e) {
498
+
499
+ e.printStackTrace();
500
+
501
+ }
502
+
503
+ }
454
504
 
455
505
  }
456
506
 
457
-
458
-
459
507
  }
460
508
 
509
+
510
+
511
+
512
+
461
- ```
513
+ ```
462
-
463
-
464
-
465
- DB接続共通処理ConnectionUtil
466
-
467
-
468
-
469
- ```
470
-
471
-
472
-
473
- package dao;
474
-
475
-
476
-
477
- import java.sql.Connection;
478
-
479
- import java.sql.DriverManager;
480
-
481
- import java.sql.PreparedStatement;
482
-
483
- import java.sql.SQLException;
484
-
485
-
486
-
487
- public class ConnectionUtil {
488
-
489
-
490
-
491
- //JDBCドライバーと接続先データベース名を代入
492
-
493
- private static String driverName = "com.mysql.cj.jdbc.Driver";
494
-
495
- private static String url = "jdbc:mysql://localhost:3306/company?characterEncoding=UTF8&serverTimezone=JST";
496
-
497
-
498
-
499
- //userアカウントを代入
500
-
501
- private static final String user = "root";
502
-
503
- private static final String pass = "Sy";
504
-
505
-
506
-
507
- //DB接続のメソッド
508
-
509
- public Connection getConnection() {
510
-
511
- try {
512
-
513
- Class.forName(driverName);
514
-
515
- return DriverManager.getConnection(url, user, pass);
516
-
517
- } catch (Exception e) {
518
-
519
- throw new IllegalArgumentException(e);
520
-
521
- }
522
-
523
- }
524
-
525
-
526
-
527
- //DB close処理
528
-
529
- public void allClose(PreparedStatement ps, Connection conn) {
530
-
531
- if (ps != null) {
532
-
533
- try {
534
-
535
- ps.close();
536
-
537
- } catch (SQLException e) {
538
-
539
- e.printStackTrace();
540
-
541
- }
542
-
543
- }
544
-
545
- if (conn != null) {
546
-
547
- try {
548
-
549
- conn.close();
550
-
551
- } catch (SQLException e) {
552
-
553
- e.printStackTrace();
554
-
555
- }
556
-
557
- }
558
-
559
- }
560
-
561
- }
562
-
563
-
564
-
565
-
566
-
567
- ```

2

SQLExcepionにthrow e;を追加しました。

2020/06/22 11:53

投稿

yyuukkii
yyuukkii

スコア7

test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,48 @@
24
24
 
25
25
 
26
26
 
27
+
28
+
29
+ ServletクラスとDaoクラスの(SQLException e)e.printStackTrace();の下にthrow e;を加えました。
30
+
31
+ 変更後エラーが表示されるようになりました。
32
+
33
+
34
+
35
+ 500エラー
36
+
37
+ javax.servlet.ServletException: サーブレットの実行により例外を投げました
38
+
39
+ org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
40
+
41
+
42
+
43
+
44
+
45
+ 根本原因
46
+
47
+ java.lang.Error: Unresolved compilation problem:
48
+
49
+ 処理されない例外の型 SQLException
50
+
51
+
52
+
53
+ servlet.ListServlet.doGet(ListServlet.java:35)
54
+
55
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
56
+
57
+ javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
58
+
59
+ org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
60
+
61
+
62
+
63
+ 【コンソールのエラー】
64
+
65
+ 重大: パス[/Manager]を持つコンテキスト内のサーブレット[servlet.ListServlet]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。
66
+
67
+
68
+
27
69
  javaを始めたばかりで検討が付きません。
28
70
 
29
71
  お手数ですが、ご教授いただけないでしょうか?
@@ -270,13 +312,13 @@
270
312
 
271
313
 
272
314
 
273
- //SQLExceptionとExceptionの違い
315
+
274
316
 
275
317
  } catch (SQLException e) {
276
318
 
277
319
  e.printStackTrace();
278
320
 
279
-
321
+              throw e; //追加しました。
280
322
 
281
323
  } catch (Exception e) {
282
324
 
@@ -378,7 +420,23 @@
378
420
 
379
421
  EmployeeListDao dao = new EmployeeListDao();
380
422
 
381
- List<EmployeeListModel> lists = dao.findAll();
423
+ List<EmployeeListModel> lists = null;
424
+
425
+          
426
+
427
+ //ここにもSQLException追加しないと×マークがついてしまうので追加しました。
428
+
429
+ try {
430
+
431
+ lists = dao.findAll();
432
+
433
+ } catch (SQLException e) {
434
+
435
+
436
+
437
+ e.printStackTrace();
438
+
439
+ }
382
440
 
383
441
  request.setAttribute("lists", lists);
384
442
 

1

//でエラー箇所記載

2020/06/22 10:31

投稿

yyuukkii
yyuukkii

スコア7

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ・DBの値のみ取れていない状況です。
18
18
 
19
- ・ResultSet rs という変数に値が入り、rs.next()でデータを取得しようとしましたが、
19
+ EmployeeListDao内のResultSet rs という変数に値が入り、rs.next()でデータを取得しようとしましたが、
20
20
 
21
21
   デバッガを使ったところこのrsの部分で値が反映されずSQLExceptionに流れてしまう。
22
22
 
@@ -238,13 +238,9 @@
238
238
 
239
239
 
240
240
 
241
- while(rs.next()) {
242
-
243
-
244
-
245
- String record = rs.getString("Hello");
241
+ while(rs.next()) { //ここで値が取れずSQLExceptionに流れてしまう。
246
-
247
- System.out.println(record);
242
+
243
+
248
244
 
249
245
  EmployeeListModel elm = new EmployeeListModel();
250
246