質問編集履歴

2

質問の内容を変えました

2020/05/28 05:15

投稿

ypk
ypk

スコア80

test CHANGED
@@ -1 +1 @@
1
- ドに記載せず、設定ファイなどに接続情報を逃がしたい
1
+ DEPTテ情報を取得、インスタンスを用いて表示させたい
test CHANGED
@@ -4,33 +4,209 @@
4
4
 
5
5
 
6
6
 
7
+ > Statement sttSql = db.createStatement();
8
+
9
+
10
+
11
+ > ResultSet rs = db.getResultSet("select * from DEPT");
12
+
13
+ >
14
+
15
+ > ResultSet rs =sttSql.executeQuery(select * from DEPT);
16
+
17
+
18
+
7
- データベースが載されているコード(「//接続情報」以下個所)を、直接コードに記載せずともデータベースに接続ができるようなコードを作成したす。
19
+ などを駆使することを通して、下コード情報を「MyDBAccess」のインスタンス生成することを通して取得し、データベースにアクセスし、JSP(「私のコード」に記述があります)にて表示すること試みてす。
8
-
9
-
10
-
11
- #書き換えをしたいコード
12
20
 
13
21
 
14
22
 
15
23
  ```Java
16
24
 
17
- <%@ page contentType="text/html; charset=UTF-8"
18
-
19
- import="java.sql.*" %>
20
-
21
- <% request.setCharacterEncoding("UTF-8");
22
-
23
-
24
-
25
- //接続情報
26
-
27
- String DBDriver = "com.mysql.jdbc.Driver";
28
-
29
- String DBUrl = "jdbc:mysql://localhost:3306/×××××;//意図的に伏せています
30
-
31
- String DBUser = "root";
32
-
33
- String DBPassword = "×××××";//意図的に伏せています
25
+ package atmarkit;
26
+
27
+
28
+
29
+ import java.sql.*;
30
+
31
+
32
+
33
+ public class MyDBAccess {
34
+
35
+
36
+
37
+ private String driver;
38
+
39
+ private String url;
40
+
41
+ private String user;
42
+
43
+ private String password;
44
+
45
+ private Connection connection;
46
+
47
+ private Statement statement;
48
+
49
+ private ResultSet resultset;
50
+
51
+
52
+
53
+ /**
54
+
55
+ * コンストラクタ
56
+
57
+ * @param driver ドライバー
58
+
59
+ * @param url URL
60
+
61
+ * @param user ユーザー名
62
+
63
+ * @param password パスワード
64
+
65
+ */
66
+
67
+ public MyDBAccess(String driver, String url, String user, String password) {
68
+
69
+ this.driver = driver;
70
+
71
+ this.url = url;
72
+
73
+ this.user = user;
74
+
75
+ this.password = password;
76
+
77
+ }
78
+
79
+
80
+
81
+ /**
82
+
83
+ * 引数なしのコンストラクタ
84
+
85
+ * 既定値を使用する
86
+
87
+ */
88
+
89
+ public MyDBAccess() {
90
+
91
+ driver = "com.mysql.jdbc.Driver";
92
+
93
+ url = "jdbc:mysql://localhost:3306/××××;//意図的に伏せています
94
+
95
+ user = "root";
96
+
97
+ password = "××××";//意図的に伏せています
98
+
99
+ }
100
+
101
+
102
+
103
+ /**
104
+
105
+ * データベースへの接続を行う
106
+
107
+ */
108
+
109
+ public synchronized void open() throws Exception {
110
+
111
+ Class.forName(driver);
112
+
113
+ connection = DriverManager.getConnection(url, user, password);
114
+
115
+ statement = connection.createStatement();
116
+
117
+ }
118
+
119
+
120
+
121
+ /**
122
+
123
+ * SQL 文を実行した結果の ResultSet を返す
124
+
125
+ * @param sql SQL 文
126
+
127
+ */
128
+
129
+ public ResultSet getResultSet(String sql) throws Exception {
130
+
131
+ if ( statement.execute(sql) ) {
132
+
133
+ return statement.getResultSet();
134
+
135
+ }
136
+
137
+ return null;
138
+
139
+ }
140
+
141
+
142
+
143
+ /**
144
+
145
+ * SQL 文の実行
146
+
147
+ * @param sql SQL 文
148
+
149
+ */
150
+
151
+ public void execute(String sql) throws Exception {
152
+
153
+ statement.execute(sql);
154
+
155
+ }
156
+
157
+
158
+
159
+ /**
160
+
161
+ * データベースへのコネクションのクローズ
162
+
163
+ */
164
+
165
+ public synchronized void close() throws Exception {
166
+
167
+ if ( resultset != null ) resultset.close();
168
+
169
+ if ( statement != null ) statement.close();
170
+
171
+ if ( connection != null ) connection.close();
172
+
173
+ }
174
+
175
+ }
176
+
177
+ ```
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+ ![![イメージ説明](517cf79590b226aadc480db2b9ab53df.png)]
186
+
187
+
188
+
189
+ しかし、試行錯誤しているのですがうまくいきません。
190
+
191
+ 知恵を貸していただけると嬉しいです。どうぞよろしくお願いいたします。
192
+
193
+
194
+
195
+ #私のコード
196
+
197
+
198
+
199
+ ```Java
200
+
201
+ <%@ page import="java.sql.*, atmarkit.MyDBAccess"
202
+
203
+ contentType="text/html; charset=UTF-8" %>
204
+
205
+
206
+
207
+
208
+
209
+ <% request.setCharacterEncoding("UTF-8");
34
210
 
35
211
 
36
212
 
@@ -38,306 +214,156 @@
38
214
 
39
215
  Connection db = null;
40
216
 
41
- //命令を管理するオブジェクト
217
+ //命令を管理するオブジェクト?
42
218
 
43
219
  Statement sttSql = null;
44
220
 
45
-
46
-
47
- String strSql = "insert into DEPT(DEPTNO,DNAME,LOC) values(" +
48
-
49
- request.getParameter("no") + ",'" +
50
-
51
- request.getParameter("name") + "','" +
52
-
53
- request.getParameter("loc") + "')";
54
-
55
-
56
-
57
- Class.forName(DBDriver);
58
-
59
- db = DriverManager.getConnection(DBUrl,DBUser,DBPassword);
60
-
61
- sttSql=db.createStatement();
62
-
63
-
64
-
65
- sttSql.executeUpdate(strSql);
66
-
67
-
68
-
69
- sttSql.close();
70
-
71
- db.close();
72
-
73
-
74
-
75
- response.sendRedirect("list_top.jsp");
76
-
77
-
78
-
79
- %>
221
+ //結果セットオブジェクト
222
+
223
+ ResultSet rs = null;
224
+
225
+
226
+
227
+ %>
228
+
229
+
230
+
231
+
232
+
233
+ <html>
234
+
235
+ <head>
236
+
237
+ <title>登録/更新/削除</title>
238
+
239
+ </head>
240
+
241
+ <body>
242
+
243
+ <h1 style="background:#cccccc">新規登録/更新/削除</h1>
244
+
245
+ <form method="POST" action="updel.jsp">
246
+
247
+ <input type="submit" name="cndbtn" value="新規" />
248
+
249
+ <input type="submit" name="cndbtn" value="更新・削除" />
250
+
251
+ <input type="reset" value="取消" />
252
+
253
+ <hr>
254
+
255
+ <table border="0">
256
+
257
+ <tr style="background:#00ccff">
258
+
259
+ <th>No.</th><th>削除</th><th>名前</th><th>場所</th>
260
+
261
+ </tr>
262
+
263
+
264
+
265
+ <%
266
+
267
+ int cnt=1;
268
+
269
+
270
+
271
+ //MyDBAccess のインスタンスを生成する
272
+
273
+ MyDBAccess db = new MyDBAccess();
274
+
275
+
276
+
277
+ //データベースへのアクセス
278
+
279
+ db.open();
280
+
281
+
282
+
283
+ Statement sttSql = db.createStatement();
284
+
285
+
286
+
287
+ ResultSet rs = db.getResultSet("select * from DEPT");
288
+
289
+
290
+
291
+ ResultSet rs =sttSql.executeQuery(select * from DEPT);
292
+
293
+
294
+
295
+ while(rs.next()){
296
+
297
+ %>
298
+
299
+ <tr style="background:#ffffcc">
300
+
301
+ <td>
302
+
303
+ <%=rs.getString("DEPTNO") %>
304
+
305
+ <input type="hidden" name="id<%=cnt %>" value="<%=rs.getString("DEPTNO")%>"
306
+
307
+ />
308
+
309
+
310
+
311
+ </td>
312
+
313
+ <td><input type="checkbox" name="del<%=cnt %>" value="true" /></td>
314
+
315
+ <td nowrap>
316
+
317
+ <input type="text" name="nam<%=cnt %>" size="30"
318
+
319
+ value="<%=rs.getString("DNAME")%>"
320
+
321
+ />
322
+
323
+ </td><td>
324
+
325
+ <input type="text" name="loc<%=cnt %>" size="30"
326
+
327
+ value="<%=rs.getString("LOC")%>"
328
+
329
+ />
330
+
331
+ </td>
332
+
333
+ </tr>
334
+
335
+
336
+
337
+ <%
338
+
339
+ cnt++;
340
+
341
+ }
342
+
343
+ rs.close();
344
+
345
+ sttSql.close();
346
+
347
+ db.close();
348
+
349
+ %>
350
+
351
+
352
+
353
+ </table>
354
+
355
+ <input type="hidden" name="cnt" value="<%=cnt %>" />
356
+
357
+ </form>
358
+
359
+ </body>
360
+
361
+ </html>
80
362
 
81
363
  ```
82
364
 
83
365
 
84
366
 
85
- #実現したいこと
86
-
87
-
88
-
89
- 上記のコードを、接続情報をコードの直接書かずともデータベースに接続できるようコードを書き替えたい
90
-
91
-
92
-
93
- #現在私が書いているコード
94
-
95
-
96
-
97
- 調べながら取り組んでみたのですが、訳が分からなくなってしまいしました。
98
-
99
-
100
-
101
- ```Java
102
-
103
-
104
-
105
- <%@ page contentType="text/html; charset=UTF-8" import="java.sql.*" %>
106
-
107
- <% request.setCharacterEncoding("UTF-8");%>
108
-
109
-
110
-
111
- <%@page import="java.io.*"%>
112
-
113
-
114
-
115
- <%@WebServlet("/listtop")%>
116
-
117
-
118
-
119
- <html>
120
-
121
- <head>
122
-
123
- <title>登録/更新/削除</title>
124
-
125
- </head>
126
-
127
- <body>
128
-
129
- <h1 style="background:#cccccc">新規登録/更新/削除</h1>
130
-
131
- <form method="POST" action="updel.jsp">
132
-
133
- <input type="submit" name="cndbtn" value="新規" />
134
-
135
- <input type="submit" name="cndbtn" value="更新・削除" />
136
-
137
- <input type="reset" value="取消" />
138
-
139
- <hr>
140
-
141
- <table border="0">
142
-
143
- <tr style="background:#00ccff">
144
-
145
- <th>No.</th><th>削除</th><th>名前</th><th>場所</th>
146
-
147
- </tr>
148
-
149
-
150
-
151
- <tr style="background:#ffffcc">
152
-
153
- <td>
154
-
155
-
156
-
157
- <%!
158
-
159
-
160
-
161
- void doGet(HttpServletRequest req,HttpServletResponse res)
162
-
163
- throws ServletException,IOException{
164
-
165
- res.setContentType("text/html;charset=UTF-8");
166
-
167
- req.setCharacterEncoding("UTF-8");
168
-
169
-
170
-
171
- PrintWriter out=res.getWriter();
172
-
173
-
174
-
175
- //実行するSQL文
176
-
177
- String strsql = "select * from DEPT";
178
-
179
-
180
-
181
- //DB接続オブジェクト
182
-
183
- Connection con = null;
184
-
185
- //命令を管理するオブジェクト
186
-
187
- PreparedStatement st = null;
188
-
189
- //結果セットオブジェクト
190
-
191
- ResultSet rs = null;
192
-
193
-
194
-
195
-
196
-
197
- %>
198
-
199
-
200
-
201
-
202
-
203
- <%=rs.getString("DEPTNO") %>
204
-
205
- <% int cnt=1;%>
206
-
207
- <input type="hidden" name="id<%=cnt %>" value="<%=rs.getString("DEPTNO")%>"
208
-
209
- />
210
-
211
-
212
-
213
- </td>
214
-
215
-
216
-
217
- <td><input type="checkbox" name="del<%=cnt %>" value="true" /></td>
218
-
219
- <td nowrap>
220
-
221
- <input type="text" name="nam<%=cnt %>" size="30"
222
-
223
- value="<%=rs.getString("DNAME")%>"
224
-
225
- />
226
-
227
-
228
-
229
- </td><td>
230
-
231
- <input type="text" name="loc<%=cnt %>" size="30"
232
-
233
- value="<%=rs.getString("LOC")%>"
234
-
235
- />
236
-
237
- </td>
238
-
239
- </tr>
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
- <%!
248
-
249
- try{
250
-
251
-
252
-
253
- InitialContext ic = new InitialContext();
254
-
255
- DataSource ds = (DataSource)ic.lookup("java:/comp/env/jdbc/my_dbedu");
256
-
257
-
258
-
259
- //DBへの接続処理
260
-
261
- con = ds.getConnection();
262
-
263
-
264
-
265
- //SQLを命令するためのオブジェクト生成
266
-
267
- st=con.prepareStatement(strsql);
268
-
269
-
270
-
271
- //結果セットの作成(SELECT文の実行)
272
-
273
- rs = st.executeQuery();
274
-
275
-
276
-
277
- String html="";
278
-
279
- html="<style>th{background:#fffacd}td{border:1px solid #b0c4de;}</style>"
280
-
281
- +"<table><tr><th>NO</th><th>氏名</th><th>住所</th></tr>";
282
-
283
-
284
-
285
- while(rs.next()){
286
-
287
- html+="<tr><td>"
288
-
289
- +rs.getInt("DEPTNO")+"</td>"
290
-
291
- +"<td>"+rs.getString("DNAME")+"</td>"
292
-
293
- +"<td>"+rs.getString("LOC")+"</td></tr>";
294
-
295
- }
296
-
297
- html+="</table>";
298
-
299
- out.println(html);
300
-
301
- }catch(Exception e){
302
-
303
- out.println("<h3>エラー発生!</h3>"+e);
304
-
305
- e.printStackTrace();
306
-
307
- }finally{
308
-
309
- try{
310
-
311
- st.close();
312
-
313
- con.close();
314
-
315
- }catch(Exception e){
316
-
317
- e.printStackTrace();
318
-
319
- }
320
-
321
-
322
-
323
- %>
324
-
325
-
326
-
327
- </table>
328
-
329
- <input type="hidden" name="cnt" value="<%=cnt %>" />
330
-
331
- </form>
332
-
333
- </body>
334
-
335
- </html>
336
-
337
- ```
338
-
339
-
340
-
341
367
  もし何か、気になる箇所などございましたらご教授いただけたら幸いです。
342
368
 
343
369
  どうぞよろしくお願いいたします。

1

質問、タグの修正をしました。よろしくお願いいたします。

2020/05/28 05:15

投稿

ypk
ypk

スコア80

test CHANGED
@@ -1 +1 @@
1
- 接続情報を表記しない形のコードでもデータベースに接続できるようにしたい
1
+ コードに記載せず、設定ファイルなどに接続情報を逃がしたい
test CHANGED
File without changes