質問編集履歴

4

誤記を訂正します。

2018/07/22 15:17

投稿

denno_shun
denno_shun

スコア4

test CHANGED
File without changes
test CHANGED
@@ -50,9 +50,29 @@
50
50
 
51
51
 
52
52
 
53
- **3.CLASSPATHの指定**
53
+ **3.Class.forName」を使う**
54
+
54
-
55
+ 「No suitable driver」の解決方式では「Class.forName」を使ことが広く行われている(Java8以前)ようでしたので、試したところ、次のようにJava10ではコンパイルエラーになってしまいました。、
56
+
57
+
58
+
59
+ ```エラーメッセージ
60
+
61
+ 「例外ClassNotFoundExceptionは報告されません。スローするには、捕捉または宣言する必要があります」
62
+
63
+ ```
64
+
65
+
66
+
67
+
68
+
69
+ ### 該当のソースコード
70
+
71
+
72
+
73
+ ```Java10/MySQL8
74
+
55
- CLASSPATHを次のように指定して実行しました。
75
+ 下記コードを次のコマンドで実行しました。
56
76
 
57
77
 
58
78
 
@@ -60,286 +80,254 @@
60
80
 
61
81
  > java Sample
62
82
 
63
-
83
+ import java.sql.*;
84
+
64
-
85
+ import java.util.*;
86
+
87
+
88
+
89
+ public class Sample {
90
+
91
+ static final String URL = "jdbc:mysql://localhost/sampledb";
92
+
93
+ static final String USERNAME = "root";
94
+
95
+ static final String PASSWORD = "password"; //書き換えて実行
96
+
97
+
98
+
99
+ public static void main(String[] args) {
100
+
101
+ try (Connection connection = DriverManager.getConnection
102
+
103
+ (URL, USERNAME, PASSWORD);
104
+
105
+ Statement statement = connection.createStatement(); ){
106
+
107
+ String sql = "SELECT * FROM ENGLISH";
108
+
109
+ ResultSet result = statement.executeQuery(sql);
110
+
111
+
112
+
113
+ while (result.next()) {
114
+
115
+ System.out.print (result.getInt ("STUDENTNO" ) + "\t");
116
+
117
+ System.out.print (result.getString("STUDENTNAME") + "\t");
118
+
119
+ System.out.println(result.getInt ("SCORE" ));
120
+
121
+ }
122
+
123
+ } catch (SQLException e) {
124
+
125
+ e.printStackTrace();
126
+
127
+ }
128
+
129
+ }
130
+
131
+ }
132
+
133
+
134
+
135
+ ```
136
+
137
+
138
+
139
+ ### 試したこと
140
+
141
+
142
+
65
- すると、次のエラーとました。
143
+ 次のよう手順で確認しました。
144
+
66
-
145
+ ■MySQL8のインストール
146
+
67
-
147
+ △インストール前に、MySQL5.1.12をアンインストールし、さらにMySQL関連のファイルをすべて削除し、完全に空の状態でダウンロード/インストールしました。
148
+
149
+
150
+
151
+ △認証方法としては、「Legacy Authentication Method」を選択しました。
152
+
153
+ (Legacyにしないと、うまくいかないようでしたので、再度インストールしました)
154
+
155
+
156
+
157
+ △MySQLに対するパスを設定しました。
158
+
159
+
160
+
161
+ ■MySQLをコマンドプロンプトで実行し、次のようにデータベースを作成、表示しました。
162
+
163
+ ```コマンドプロンプト
164
+
165
+ >mysql –u root –p
166
+
167
+ Enter password: ********
168
+
169
+ mysql> source sampledb;
170
+
171
+ mysql> use sampledb;
172
+
173
+ mysql>select * from english;
174
+
175
+ ```
176
+
177
+ △テーブルは正しく表示されました。
178
+
179
+ ここで、sampledbは次のように作りました。
180
+
181
+
182
+
183
+ ```MySQL
184
+
185
+ CREATE DATABASE SAMPLEDB;
186
+
187
+ USE SAMPLEDB;
188
+
189
+ CREATE TABLE ENGLISH (
190
+
191
+ STUDENTNO INT(10),
192
+
193
+ STUDENTNAME VARCHAR(20),
194
+
195
+ SCORE INT
196
+
197
+ );
198
+
199
+ INSERT INTO ENGLISH VALUES(1001,'野口英雄',70);
200
+
201
+ INSERT INTO ENGLISH VALUES(1002,'板垣退助',25);
202
+
203
+ INSERT INTO ENGLISH VALUES(1003,'伊藤博文',90);
204
+
205
+ ```
206
+
207
+
208
+
209
+
210
+
211
+ ■次に、作成されたSAMPLEDBをJavaのプログラムで表示することにしました。
212
+
213
+ △MySQL8のインストールで、「mysql-installer-community-8.0.11.0.msi」が得られました。ダブルクリックすると、「mysql-connector-java-8.0.11.jar」が生成されたので、これがjdbcドライバと判断し、JDKライブラリフォルダへ設定することにしました。
214
+
215
+
216
+
217
+ △java8では「C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext」の下にコピーしました。
218
+
219
+ ところがJava10では、extフォルダはありませんでした。
220
+
221
+
222
+
223
+ △仕方がないので、libの下に自分でextフォルダを作成して、JDBCドライバを挿入して実行したら、次のメッセージが出て、叱られました。
68
224
 
69
225
  ```エラーメッセージ
70
226
 
227
+ /lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
228
+
229
+
230
+
231
+ ```
232
+
233
+ ■「C:\java\test」フォルダを作成し、Sample.javaとjdbcのドライバをコピーして入れました。
234
+
235
+ △次の結果となりました。
236
+
237
+ ```コマンドプロンプト
238
+
239
+ >set CLASSPATH=C:\java\test
240
+
241
+ >java Sample
242
+
71
243
  java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sampledb
72
244
 
73
245
  (Sample.java:11)
74
246
 
75
247
  ```
76
248
 
77
-
249
+
78
-
79
-
80
-
250
+
81
- ### 該当ソースコード
251
+ ここで、Sample.javaは次ように作りました。
82
-
83
-
84
-
252
+
253
+
254
+
85
- ```Java10/MySQL8
255
+ ```Java (Java10)
256
+
86
-
257
+ import java.sql.*;
258
+
259
+ import java.util.*;
260
+
261
+
262
+
263
+ public class Sample {
264
+
265
+ static final String URL = "jdbc:mysql://localhost/sampledb";
266
+
267
+ static final String USERNAME = "root";
268
+
269
+ static final String PASSWORD = "password"; //書き換えて実行
270
+
271
+
272
+
273
+ public static void main(String[] args) {
274
+
275
+ try (Connection connection = DriverManager.getConnection
276
+
277
+ (URL, USERNAME, PASSWORD);
278
+
279
+ Statement statement = connection.createStatement(); ){
280
+
281
+ String sql = "SELECT * FROM ENGLISH";
282
+
283
+ ResultSet result = statement.executeQuery(sql);
284
+
285
+
286
+
287
+ while (result.next()) {
288
+
289
+ System.out.print (result.getInt ("STUDENTNO" ) + "\t");
290
+
291
+ System.out.print (result.getString("STUDENTNAME") + "\t");
292
+
293
+ System.out.println(result.getInt ("SCORE" ));
294
+
295
+ }
296
+
297
+ } catch (SQLException e) {
298
+
299
+ e.printStackTrace();
300
+
301
+ }
302
+
303
+ }
304
+
305
+ }
306
+
307
+ ```
308
+
309
+ ----------
310
+
87
- 下記コードを次のコマンドで実行しました。
311
+ ■前述の方法以外に、次の方法も試てみました。
312
+
88
-
313
+ 「C:\java\test」フォルダにSample.java、「C:\java\testlib」にjdbcドライバを入れて実行
314
+
89
-
315
+ △結果は次の通りです。
316
+
317
+
318
+
319
+ ```コマンドプロンプト
90
320
 
91
321
  > set CLASSPATH=C:\java\test;C:\java\testlib\mysql-connector-java-8.0.11.jar
92
322
 
93
323
  > java Sample
94
324
 
95
- import java.sql.*;
96
-
97
- import java.util.*;
98
-
99
-
100
-
101
- public class Sample {
102
-
103
- static final String URL = "jdbc:mysql://localhost/sampledb";
104
-
105
- static final String USERNAME = "root";
106
-
107
- static final String PASSWORD = "password"; //書き換えて実行
108
-
109
-
110
-
111
- public static void main(String[] args) {
112
-
113
- try (Connection connection = DriverManager.getConnection
114
-
115
- (URL, USERNAME, PASSWORD);
116
-
117
- Statement statement = connection.createStatement(); ){
118
-
119
- String sql = "SELECT * FROM ENGLISH";
120
-
121
- ResultSet result = statement.executeQuery(sql);
122
-
123
-
124
-
125
- while (result.next()) {
126
-
127
- System.out.print (result.getInt ("STUDENTNO" ) + "\t");
128
-
129
- System.out.print (result.getString("STUDENTNAME") + "\t");
130
-
131
- System.out.println(result.getInt ("SCORE" ));
132
-
133
- }
134
-
135
- } catch (SQLException e) {
136
-
137
- e.printStackTrace();
138
-
139
- }
140
-
141
- }
142
-
143
- }
144
-
145
-
146
-
147
- ```
148
-
149
-
150
-
151
- ### 試したこと
152
-
153
-
154
-
155
- 次のような手順で確認しました。
156
-
157
- ■MySQL8のインストール
158
-
159
- △インストール前に、MySQL5.1.12をアンインストールし、さらにMySQL関連のファイルをすべて削除し、完全に空の状態でダウンロード/インストールしました。
160
-
161
-
162
-
163
- △認証方法としては、「Legacy Authentication Method」を選択しました。
164
-
165
- (Legacyにしないと、うまくいかないようでしたので、再度インストールしました)
166
-
167
-
168
-
169
- △MySQLに対するパスを設定しました。
170
-
171
-
172
-
173
- ■MySQLをコマンドプロンプトで実行し、次のようにデータベースを作成、表示しました。
174
-
175
- ```コマンドプロンプト
176
-
177
- >mysql –u root –p
178
-
179
- Enter password: ********
180
-
181
- mysql> source sampledb;
182
-
183
- mysql> use sampledb;
184
-
185
- mysql>select * from english;
186
-
187
- ```
188
-
189
- △テーブルは正しく表示されました。
190
-
191
- ここで、sampledbは次のように作りました。
192
-
193
-
194
-
195
- ```MySQL
196
-
197
- CREATE DATABASE SAMPLEDB;
198
-
199
- USE SAMPLEDB;
200
-
201
- CREATE TABLE ENGLISH (
202
-
203
- STUDENTNO INT(10),
204
-
205
- STUDENTNAME VARCHAR(20),
206
-
207
- SCORE INT
208
-
209
- );
210
-
211
- INSERT INTO ENGLISH VALUES(1001,'野口英雄',70);
212
-
213
- INSERT INTO ENGLISH VALUES(1002,'板垣退助',25);
214
-
215
- INSERT INTO ENGLISH VALUES(1003,'伊藤博文',90);
216
-
217
- ```
218
-
219
-
220
-
221
-
222
-
223
- ■次に、作成されたSAMPLEDBをJavaのプログラムで表示することにしました。
224
-
225
- △MySQL8のインストールで、「mysql-installer-community-8.0.11.0.msi」が得られました。ダブルクリックすると、「mysql-connector-java-8.0.11.jar」が生成されたので、これがjdbcドライバと判断し、JDKライブラリフォルダへ設定することにしました。
226
-
227
-
228
-
229
- △java8では「C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext」の下にコピーしました。
230
-
231
- ところがJava10では、extフォルダはありませんでした。
232
-
233
-
234
-
235
- △仕方がないので、libの下に自分でextフォルダを作成して、JDBCドライバを挿入して実行したら、次のメッセージが出て、叱られました。
236
-
237
- ```エラーメッセージ
238
-
239
- /lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
240
-
241
-
242
-
243
- ```
244
-
245
- ■「C:\java\test」フォルダを作成し、Sample.javaとjdbcのドライバをコピーして入れました。
246
-
247
- △次の結果となりました。
248
-
249
- ```コマンドプロンプト
250
-
251
- >set CLASSPATH=C:\java\test
252
-
253
- >java Sample
254
-
255
325
  java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sampledb
256
326
 
257
327
  (Sample.java:11)
258
328
 
259
329
  ```
260
330
 
261
-
262
-
263
- ここで、Sample.javaは次のように作りました。
264
-
265
-
266
-
267
- ```Java (Java10)
268
-
269
- import java.sql.*;
270
-
271
- import java.util.*;
272
-
273
-
274
-
275
- public class Sample {
276
-
277
- static final String URL = "jdbc:mysql://localhost/sampledb";
278
-
279
- static final String USERNAME = "root";
280
-
281
- static final String PASSWORD = "password"; //書き換えて実行
282
-
283
-
284
-
285
- public static void main(String[] args) {
286
-
287
- try (Connection connection = DriverManager.getConnection
288
-
289
- (URL, USERNAME, PASSWORD);
290
-
291
- Statement statement = connection.createStatement(); ){
292
-
293
- String sql = "SELECT * FROM ENGLISH";
294
-
295
- ResultSet result = statement.executeQuery(sql);
296
-
297
-
298
-
299
- while (result.next()) {
300
-
301
- System.out.print (result.getInt ("STUDENTNO" ) + "\t");
302
-
303
- System.out.print (result.getString("STUDENTNAME") + "\t");
304
-
305
- System.out.println(result.getInt ("SCORE" ));
306
-
307
- }
308
-
309
- } catch (SQLException e) {
310
-
311
- e.printStackTrace();
312
-
313
- }
314
-
315
- }
316
-
317
- }
318
-
319
- ```
320
-
321
- ----------
322
-
323
- ■前述の方法以外に、次の方法も試してみました。
324
-
325
- 「C:\java\test」フォルダにSample.java、「C:\java\testlib」にjdbcドライバを入れて実行
326
-
327
- △結果は次の通りです。
328
-
329
-
330
-
331
- ```コマンドプロンプト
332
-
333
- > set CLASSPATH=C:\java\test;C:\java\testlib\mysql-connector-java-8.0.11.jar
334
-
335
- > java Sample
336
-
337
- java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sampledb
338
-
339
- (Sample.java:11)
340
-
341
- ```
342
-
343
331
  ほかにもいろいろ試してみましたが、結局上記のエラーとなってしまいます。
344
332
 
345
333
  何が問題なのでしょうか。Java10とMySQL8の組み合わせが悪いのでしょうか。よろしくお願いします。

3

Java10へのアップロードの問題点であることを明記しました。

2018/07/22 15:17

投稿

denno_shun
denno_shun

スコア4

test CHANGED
@@ -1 +1 @@
1
- MySQL8で作成したデータベースをJava10で読み込もうとすると、「No suitable driver」エラーってしいました
1
+ Java10にアップデートしたら、MySQLが読めなくなりました「No suitable driver」エラー
test CHANGED
@@ -2,23 +2,43 @@
2
2
 
3
3
 
4
4
 
5
- ここに質問の内容を詳しく書いてください。
6
-
7
- MySQL8ストーコマンドプロンプトで簡単なデータベースを作成しました。それをJava10で表示ようとすると、「No suitable driver」エラーってしいました。
5
+ Java8で実行していたMySQLを読み込む簡単なサ、Javaのバージョンを10にアップデートたら、「No suitable driver」エラーり、実行できなくなりました。
6
+
7
+ Java8とJava10は互換性が保証されないと聞いていましたが、もろに影響を受けてしまいました。MySQLで作成したデータベースを、コマンドプロンプトでjavaを実行して表示する簡単なプログラムなのに動かなくなりました。(eclipse等は使っていません)
8
+
9
+
10
+
11
+ Java10でMySQLをどのように読み込んだらよいか、ぜひ教えてください。
8
12
 
9
13
 
10
14
 
11
15
  ### 発生している問題・エラーメッセージ
12
16
 
13
-
17
+ **1. lib/extフォルダの廃止**
18
+
14
-
19
+ Java8ではjdbcドライバを「C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext」の下にコピーしていました。
20
+
21
+ ところがJava10では、extフォルダはありませんでした。
22
+
23
+ 自分でフォルダを作成、コピーして実行すると、次のエラーとなりました。
24
+
25
+
26
+
27
+ ```エラーメッセージ
28
+
29
+ /lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
30
+
15
- ```
31
+ ```
16
-
17
- Java8 , MySQL5の環境では動作していた簡単なサンプルです。Java10 , MySQL8にバージョンアップしたら、下記エラーで動かなくなりました。
32
+
18
-
33
+
34
+
19
- 何がいけないでしょう。ぜひ教えてください。
35
+ **2.CLASSPATH指定**
36
+
20
-
37
+ CLASSPATHを次のように指定して実行すると、次のエラーとなりました。
38
+
39
+
40
+
21
-
41
+ ```エラーメッセージ
22
42
 
23
43
  java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sampledb
24
44
 
@@ -26,6 +46,36 @@
26
46
 
27
47
  ```
28
48
 
49
+ いろいろな様式でクラスパスを指定してみましたが、結果は同じでした。
50
+
51
+
52
+
53
+ **3.CLASSPATHの指定**
54
+
55
+ CLASSPATHを次のように指定して実行しました。
56
+
57
+
58
+
59
+ > set CLASSPATH=C:\java\test;C:\java\testlib\mysql-connector-java-8.0.11.jar
60
+
61
+ > java Sample
62
+
63
+
64
+
65
+ すると、次のエラーとなりました。
66
+
67
+
68
+
69
+ ```エラーメッセージ
70
+
71
+ java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/sampledb
72
+
73
+ (Sample.java:11)
74
+
75
+ ```
76
+
77
+
78
+
29
79
 
30
80
 
31
81
  ### 該当のソースコード

2

タイトルのJavaのバージョンが、Java10であるべきがJava8にミスしていましたので訂正しました。

2018/07/22 15:06

投稿

denno_shun
denno_shun

スコア4

test CHANGED
@@ -1 +1 @@
1
- MySQL8で作成したデータベースをJava8で読み込もうとすると、「No suitable driver」エラーになってしまいました。
1
+ MySQL8で作成したデータベースをJava10で読み込もうとすると、「No suitable driver」エラーになってしまいました。
test CHANGED
File without changes

1

書式の改善 (コード、メッセージを見やすく)を図りました

2018/07/18 13:29

投稿

denno_shun
denno_shun

スコア4

test CHANGED
File without changes
test CHANGED
@@ -108,16 +108,22 @@
108
108
 
109
109
  △インストール前に、MySQL5.1.12をアンインストールし、さらにMySQL関連のファイルをすべて削除し、完全に空の状態でダウンロード/インストールしました。
110
110
 
111
+
112
+
111
113
  △認証方法としては、「Legacy Authentication Method」を選択しました。
112
114
 
113
115
  (Legacyにしないと、うまくいかないようでしたので、再度インストールしました)
114
116
 
117
+
118
+
115
119
  △MySQLに対するパスを設定しました。
116
120
 
117
121
 
118
122
 
119
123
  ■MySQLをコマンドプロンプトで実行し、次のようにデータベースを作成、表示しました。
120
124
 
125
+ ```コマンドプロンプト
126
+
121
127
  >mysql –u root –p
122
128
 
123
129
  Enter password: ********
@@ -128,11 +134,15 @@
128
134
 
129
135
  mysql>select * from english;
130
136
 
137
+ ```
138
+
131
139
  △テーブルは正しく表示されました。
132
140
 
133
141
  ここで、sampledbは次のように作りました。
134
142
 
143
+
144
+
135
- ↓↓↓↓↓
145
+ ```MySQL
136
146
 
137
147
  CREATE DATABASE SAMPLEDB;
138
148
 
@@ -154,28 +164,40 @@
154
164
 
155
165
  INSERT INTO ENGLISH VALUES(1003,'伊藤博文',90);
156
166
 
157
- ↑↑↑↑↑
167
+ ```
168
+
169
+
158
170
 
159
171
 
160
172
 
161
173
  ■次に、作成されたSAMPLEDBをJavaのプログラムで表示することにしました。
162
174
 
163
- △MySQL8のインストールで、「mysql-installer-community-8.0.11.0.msi」が得られましたので、ダブルクリックすると、「mysql-connector-java-8.0.11.jar」が生成されたので、これがjdbcドライバと判断し、JDKライブラリフォルダへ設定することにしました。
175
+ △MySQL8のインストールで、「mysql-installer-community-8.0.11.0.msi」が得られましたダブルクリックすると、「mysql-connector-java-8.0.11.jar」が生成されたので、これがjdbcドライバと判断し、JDKライブラリフォルダへ設定することにしました。
176
+
177
+
164
178
 
165
179
  △java8では「C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext」の下にコピーしました。
166
180
 
167
181
  ところがJava10では、extフォルダはありませんでした。
168
182
 
183
+
184
+
169
185
  △仕方がないので、libの下に自分でextフォルダを作成して、JDBCドライバを挿入して実行したら、次のメッセージが出て、叱られました。
170
186
 
187
+ ```エラーメッセージ
188
+
171
- /lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
189
+ /lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
190
+
191
+
192
+
172
-
193
+ ```
173
-
174
194
 
175
195
  ■「C:\java\test」フォルダを作成し、Sample.javaとjdbcのドライバをコピーして入れました。
176
196
 
177
197
  △次の結果となりました。
178
198
 
199
+ ```コマンドプロンプト
200
+
179
201
  >set CLASSPATH=C:\java\test
180
202
 
181
203
  >java Sample
@@ -184,11 +206,15 @@
184
206
 
185
207
  (Sample.java:11)
186
208
 
209
+ ```
210
+
187
211
 
188
212
 
189
213
  ここで、Sample.javaは次のように作りました。
190
214
 
215
+
216
+
191
- ↓↓↓↓↓
217
+ ```Java (Java10)
192
218
 
193
219
  import java.sql.*;
194
220
 
@@ -240,12 +266,20 @@
240
266
 
241
267
  }
242
268
 
269
+ ```
270
+
243
271
  ----------
244
272
 
273
+ ■前述の方法以外に、次の方法も試してみました。
274
+
245
- 「C:\java\test」フォルダにSample.java、「C:\java\testlib」にjdbcドライバを入れて、次のように実行しました。
275
+ 「C:\java\test」フォルダにSample.java、「C:\java\testlib」にjdbcドライバを入れて実行
246
276
 
247
277
  △結果は次の通りです。
248
278
 
279
+
280
+
281
+ ```コマンドプロンプト
282
+
249
283
  > set CLASSPATH=C:\java\test;C:\java\testlib\mysql-connector-java-8.0.11.jar
250
284
 
251
285
  > java Sample
@@ -254,6 +288,8 @@
254
288
 
255
289
  (Sample.java:11)
256
290
 
291
+ ```
292
+
257
293
  ほかにもいろいろ試してみましたが、結局上記のエラーとなってしまいます。
258
294
 
259
295
  何が問題なのでしょうか。Java10とMySQL8の組み合わせが悪いのでしょうか。よろしくお願いします。