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

質問編集履歴

2

Javaのバージョンの追加

2018/02/15 00:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  下記は従業員IDで従業員テーブルの従業員情報(名前、年齢等)を検索するというサンプルです。
5
5
 
6
+ ※Javaのバージョン7です。
6
7
  ※importは省いています。
7
8
  ```ここに言語を入力
8
9
  public class Search {   

1

質問が途中で切れてしまったので修正

2018/02/15 00:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,12 @@
1
- 表題について、参考書によくわからないソースがありました。
1
+ 表題について、参考書によくわからないソースがいくつかありました。
2
+ ソースにコメントで番号をふったところです。
2
3
 
3
- 下記は従業員IDでEmpテーブルの従業員を検索するというサンプルです。
4
+ 下記は従業員IDで従業員テーブルの従業員情報(名前、年齢等)を検索するというサンプルです。
4
5
 
5
- ResultSet
6
-
7
6
  ※importは省いています。
8
7
  ```ここに言語を入力
9
- public class Search {   //コントローラから呼び出されたクラス
8
+ public class Search {   
10
- public void execute(HttpServletRequest request) throws SQLException {
9
+ public void execute(HttpServletRequest request) throws SQLException { //コントローラから最初に呼びだされるメソッド
11
10
  BeanDaoTest daoTest = null;
12
11
  String empId = request.getParameter("paramId");
13
12
  try {
@@ -15,7 +14,7 @@
15
14
  //省略(結果のempBeanをsetAttribute()したり、該当する従業員がいないエラーだしたり。)
16
15
  } finally {
17
16
  if (daoTest != null) {
18
- daoTest.close();
17
+ daoTest.close();  //③
19
18
  }
20
19
  }
21
20
  }
@@ -48,13 +47,26 @@
48
47
  try {
49
48
  //省略(SQL実行、結果取得)
50
49
         if (result.next()) {
50
+          bean = new EmpBean(); //セッターゲッターのクラス
51
- //省略(beanのセッターに結果セット)
51
+ //省略(beanに結果セット)
52
52
  }
53
53
  } finally {
54
- result.close();
54
+ result.close();  //②
55
- pstatement.close();
55
+ pstatement.close();  //①
56
56
  }
57
57
  return bean;
58
58
  }
59
59
  }
60
- ```
60
+ ```
61
+
62
+ ①getEmpData()のfinally句でPreparedStatementオブジェクトのclose時、null判定をしないといけないと思うのですが、間違いないですか?
63
+ もしPreparedStatementオブジェクトの生成前に例外が発生した場合、NullPointerExceptionが発生してしまうという認識です。
64
+
65
+ ②ResultSetオブジェクトのclose時も、このソースの場合はnull判定必要ですよね?
66
+ ResultSetオブジェクトは、結果がない場合nullではなく一行もない状態になるので、close時もnull判定はいらないそうですが、今回は最初にnullで初期化しているので、①と同じ理由で必要かと思いました。
67
+
68
+ ③Connectionオブジェクトですが、このソースでは呼び出し元でcloseされています。
69
+ 何か理由があるのでしょうか?
70
+ 何か意図があってこうなっているようにも見えるのですが、ResultSetやPreparedStatementと同じfinally句でcloseしてはいけなかったのでしょうか?
71
+
72
+ 長々と失礼致しました。回答お待ちしております。