質問編集履歴

2

Javaのバージョンの追加

2018/02/15 00:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -7,6 +7,8 @@
7
7
  下記は従業員IDで従業員テーブルの従業員情報(名前、年齢等)を検索するというサンプルです。
8
8
 
9
9
 
10
+
11
+ ※Javaのバージョン7です。
10
12
 
11
13
  ※importは省いています。
12
14
 

1

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

2018/02/15 00:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,10 @@
1
- 表題について、参考書によくわからないソースがありました。
1
+ 表題について、参考書によくわからないソースがいくつかありました。
2
+
3
+ ソースにコメントで番号をふったところです。
2
4
 
3
5
 
4
6
 
5
- 下記は従業員IDでEmpテーブルの従業員を検索するというサンプルです。
7
+ 下記は従業員IDで従業員テーブルの従業員情報(名前、年齢等)を検索するというサンプルです。
6
-
7
-
8
-
9
- ResultSet
10
8
 
11
9
 
12
10
 
@@ -14,9 +12,9 @@
14
12
 
15
13
  ```ここに言語を入力
16
14
 
17
- public class Search {   //コントローラから呼び出されたクラス
15
+ public class Search {   
18
16
 
19
- public void execute(HttpServletRequest request) throws SQLException {
17
+ public void execute(HttpServletRequest request) throws SQLException { //コントローラから最初に呼びだされるメソッド
20
18
 
21
19
  BeanDaoTest daoTest = null;
22
20
 
@@ -32,7 +30,7 @@
32
30
 
33
31
  if (daoTest != null) {
34
32
 
35
- daoTest.close();
33
+ daoTest.close();  //③
36
34
 
37
35
  }
38
36
 
@@ -98,15 +96,17 @@
98
96
 
99
97
         if (result.next()) {
100
98
 
99
+          bean = new EmpBean(); //セッターゲッターのクラス
100
+
101
- //省略(beanのセッターに結果セット)
101
+ //省略(beanに結果セット)
102
102
 
103
103
  }
104
104
 
105
105
  } finally {
106
106
 
107
- result.close();
107
+ result.close();  //②
108
108
 
109
- pstatement.close();
109
+ pstatement.close();  //①
110
110
 
111
111
  }
112
112
 
@@ -117,3 +117,27 @@
117
117
  }
118
118
 
119
119
  ```
120
+
121
+
122
+
123
+ ①getEmpData()のfinally句でPreparedStatementオブジェクトのclose時、null判定をしないといけないと思うのですが、間違いないですか?
124
+
125
+ もしPreparedStatementオブジェクトの生成前に例外が発生した場合、NullPointerExceptionが発生してしまうという認識です。
126
+
127
+
128
+
129
+ ②ResultSetオブジェクトのclose時も、このソースの場合はnull判定必要ですよね?
130
+
131
+ ResultSetオブジェクトは、結果がない場合nullではなく一行もない状態になるので、close時もnull判定はいらないそうですが、今回は最初にnullで初期化しているので、①と同じ理由で必要かと思いました。
132
+
133
+
134
+
135
+ ③Connectionオブジェクトですが、このソースでは呼び出し元でcloseされています。
136
+
137
+ 何か理由があるのでしょうか?
138
+
139
+ 何か意図があってこうなっているようにも見えるのですが、ResultSetやPreparedStatementと同じfinally句でcloseしてはいけなかったのでしょうか?
140
+
141
+
142
+
143
+ 長々と失礼致しました。回答お待ちしております。