質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

3回答

8570閲覧

JDBCでMySQLに接続出来ません…

Matuidi10

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2019/04/18 05:25

編集2019/04/21 02:29

JDBCでMySQLに接続する事が出来ません。EclipseにJDBCconnectorを実装して下記のコードを
記述しました。ミスの確認として以下の事を行いました。

・接続先とMySQLで作成したデータベース名はsample_dbと一致しています。
・xamppでMySQLを使用しているのでポート番号は3306であっていると思います。 
同じパソコンで接続してMySQLとEclipseを並行して使用しているのでlhostも一致していると思います。

※気になっていた事としてhostファイルを使用して特定のサイトをブロックしていたのですがこれが原因かと
思いhostsファイルをリセットしましたが同様の結果でした。JavaDBに詳しい方教えて頂けないでしょうか。

下にprintStackTraceメソッドを実行した際の結果とjarファイルを読み込んでいて且つ
Class.forName("com.mysql.jdbc.Driver").newInstance();を記述してもスクリプト内でエラーが発生して
いる写真です。

import

1import java.sql.DriverManager; 2import java.sql.PreparedStatement; 3import java.sql.ResultSet; 4import java.sql.SQLException; 5 6public class Sample03_01 { 7 8 public static void main(String[] args) { 9String url = "jdbc:mysql://localhost:3306/sample_db"; 10 String userName = "root"; 11 String password = "root"; 12 13 Connection con = null; 14 PreparedStatement stmt = null; 15 ResultSet rs = null; 16 17 String sql = "SELECT * FROM Products"; 18 19 try { 20con = DriverManager.getConnection(url,userName, password); 21stmt = con.prepareStatement(sql); 22rs = stmt.executeQuery(); 23 24while (rs.next()) { 25 String id = rs.getString("id"); 26 String name = 27rs.getString("name"); 28 int price = rs.getInt("price"); 29 30System.out.println(id + "\t" + name + "\t" + price); 31 } 32 } catch (SQLException e) { 33System.out.println("データベースアクセスエラーです"); 34 } finally { 35 try { 36 if (con != null) { 37 con.close(); 38 } 39} catch (SQLException e) { 40 System.out.println("データベースアクセスエラーです"); 41 } 42 } 43 } 44 45}
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sample_db at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Sample03_01.main(Sample03_01.java:21)

イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/18 05:43

コードを画像で貼り付けられてもこちらで再現確認は行えません。 テキストで、マークダウンにてご提示ください
Matuidi10

2019/04/18 06:07

iosからマークダウン記法は出来ますか? パソコンでは見た事があるのですがios からは探しても出来ないような気が します。家に戻るのは夜なのでそれから 編集します。申し訳ございません。
m.ts10806

2019/04/18 06:14 編集

iPhoneまたはiPadですかね。 あまり携帯端末からコードを書くものではないですが、できますよ。単なる記法ですので、記法に乗っ取って書けばきちんと反映されます。 でもボタンもきちんとありませんか?私はAndroidスマートフォンですがマークダウンのショートカットボタンは表示されてます。
Matuidi10

2019/04/18 07:16

ご指摘ありがとうございます。 マークダウン式で記入出来ました。
takyafumin

2019/04/18 11:18

接続できない時のスタックトレースを質問へ追記出来ますか?
Matuidi10

2019/04/18 11:37

回答ありがとうございます。エラーが発生している状況ではなく 例外が発生してその結果を返している感じです。こちらは写真で追記 させて頂きます。
takyafumin

2019/04/18 11:40

例外が発生した時のExceptionを確認し、スタックトレースかメッセージを質問へ記載できますか。
takyafumin

2019/04/18 11:44

例外発生時のcatch句で、e.printStackTrace();を記述し、実行結果を質問へ追記できますか。
Matuidi10

2019/04/18 11:52

了解しました。
Matuidi10

2019/04/18 11:53

合っているかどうかはわからないですが写真を載せました。
Matuidi10

2019/04/18 12:03

すみません。調べ直したら記述の書き方がおかしいです。もう一度編集して実行します
takyafumin

2019/04/19 04:25

記載ありがとうございます。スタックトレースの1行目に発生したExceptionとエラーメッセージが出力されると思うのですが、質問に追記できますか?
Matuidi10

2019/04/19 11:28

返信遅れてしまい申し訳ございません。質問に追記させて頂きました。
guest

回答3

0

ベストアンサー

エラーメッセージ

No suitable driver found for ... <url>
DriverManagerが自身のリストに登録されているドライバーのなかから、URLを受け付けるドライバーを探したが見つからない。

原因
MySqlドライバーがDriverManagerに登録されていない。MySQLのドライバークラスがロードされていない。

対策

  • 左枠をみると参照クラスパスにlog4jのみ登録されています。ここにMySQLのjarを追加します。
  • Class.forName(.....) の行を削除します。(JBDC 4以降は不要)

接続エラー例外

ドライバーはロードされ、接続できない例外が出た。
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up

MariaDBサーバーはlocalhost:3306で正しく動作しています。いまのところ理由不明。やれることは、

  • urlをもとに戻して例外が変わるか調べる
  • 情報収集(MariaDB)、バグ情報を調べるなど

投稿2019/04/20 11:10

編集2019/04/20 19:53
xebme

総合スコア1081

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takyafumin

2019/04/20 11:25

JDBC4以降ではClassForName()が不要になったのですね。
Matuidi10

2019/04/20 11:31

質問に写真を追加しました。写真の通りで良いのでしょうか? 実行しても変わらなかったです...
xebme

2019/04/20 12:01

同じスタックトレースですか?eclipse のプロジェクトメニューでクリーンを選択する。
xebme

2019/04/20 12:11

ちゃんとつながると警告がでます。urlを以下に変更します。 jdbc:mysql://localhost:3306/sample_db?autoReconnect=true&useSSL=false
Matuidi10

2019/04/20 12:21

クリーンした後に指定されたurlを基に実行すると違うエラー文が表示されました。
xebme

2019/04/20 13:01

Windowsですよね。MySQLサービスが起動していないというメッセージです。localhostにインストールしていない?
xebme

2019/04/20 13:13

XAMPPをインストールしたのなら、Windowsのサービスが止まっているだけでしょうか?確認しましょう。Class.foNameに固執しない。
Matuidi10

2019/04/20 13:23

localhostにインストールしているの意味が調べたのですがよくわからないです。 windows10なのでサービスが止まっている事はないと思います。
xebme

2019/04/20 13:37

MySQL(MariaDB)の起動を確認するには、mysql -u root -p -h 127.0.0.1 --port 3306 を実行する。sample_dbとProductsテーブルが存在する。レコードが存在する。ここまで確認できますか。エラーが出れば、エラーメッセージを貼り付けてください。
Matuidi10

2019/04/20 13:52

貼り付けました。
xebme

2019/04/20 13:55

exitでmysqlを終わらせてから実行しましょう。
Matuidi10

2019/04/20 14:00

了解しました。色々とご指摘頂き申し訳ないです。表示された文は以下の通りです。 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 16 Server version: 10.1.38-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
xebme

2019/04/20 14:09

mysql -u root -p -h 127.0.0.1 --port 3306 で問題なく動いています。eclipse の could not create connection メッセージに戻ってやり直します。今日はここで失礼します。
Matuidi10

2019/04/21 02:28

接続先urlを「 "jdbc:mysql://localhost:3306/sample_db?serverTimezone=JST" ; 」に変更したら データベースに繋がるようになりました。わざわざ色々と相談させて頂いて本当にありがとうございました。
guest

0

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sample_db

上記にあるように、No suitable driver found for XXXXが今回のExceptionの原因になります。
該当するメッセージをGoogleで検索すると以下のようなページがヒットします。
内容としては、「mysqlに接続する際に必要なJDBCドライバ(xxxx.jar)が読み込まれていない」となります。

https://ja.stackoverflow.com/questions/10298/no-suitable-driver-found-for%EF%BD%9E%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84

このようにExceptionの内容を確認することで、何が原因か特定しやすくなります。
まずはExceptionを確認し、事例を調べてみましょう。

対策は上記ページにある内容やmoonphaseさまの回答にあるように、DriverManager#getConnection()する前にClass.forName("com.mysql.jdbc.Driver").newInstance();でMySQL用のJDBCドライバを読み込むことです。
JDBCドライバはclasspathにある必要があります。


コンパイルエラーへの対処

コメントでも回答しているように、呼び出しているmethodでthrowされているExceptionを適切に処理していない事が原因です。

Eclipseで表示されるコンパイルエラー「処理されない例外 XXXXException」への対処として、catch句に該当のExceptionを追加してください。

「エラーメッセージをそのままWeb検索しても対処が分からない」との事ですが、求めている回答がズバリ出てくると思わず、似ている事例と対処から、自分の場合にどのような事が発生しているか考えながら、いろいろと再検索してみてください。

投稿2019/04/20 09:13

編集2019/04/20 23:28
takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Matuidi10

2019/04/20 10:14

回答ありがとうございます。しかし質問の写真のようにjarファイルは読み込んでいますし Class.forName("com.mysql.jdbc.Driver").newInstance();を追加してもスクリプト内で エラーが表示されます。さらに現在のバージョンのEclipseはjdbcドライバを読み込むスクリプトは 省略可能ですし,localhostが原因なのかもしれません… Class.forName("com.mysql.jdbc.Driver").newInstance();
takyafumin

2019/04/20 10:40

JDBCドライバが読み込まれていないようです。log4jのjarしか見当たりません。 エラーが起きているとの事ですが、何度もお願いしているように、エラーの内容を確認して調べることはできないでしょか?
takyafumin

2019/04/20 10:54

ちなみに、ソース修正後変更を保存していないので、保存してください。 エラー内容はcatchすべきExceptionがcatch句に記載されていない事が原因に思われます。
Matuidi10

2019/04/20 11:30

本当に申し訳ないのですがエラーの内容の確認方法が僕の思っていたものと 違うようで僕なりに調べても仰るエラー確認がわかりません。お手数ですが 教えて頂けませんか?
xebme

2019/04/20 11:42

私の回答時点で2枚目の写真は見えていません。Class.forNameを削除しても同じ例外なら、1) URLが間違っている。2) スタックトレースの(Unknown Source)があやしいので、ビルドしなおす。
takyafumin

2019/04/20 12:16

eclipseで赤線が出ている行にマウスカーソルをあてると、エラー内容がホバーで表示されませんか?またはその行の左にある赤×アイコンをクリックしてみてください。
Matuidi10

2019/04/20 12:32

仰られたようにした写真を更新しました。
takyafumin

2019/04/20 12:50

表示されたエラー内容を確認して、どうすればいいか調べてみましたか?
Matuidi10

2019/04/20 13:10

勿論です。エラーメッセージをそのまま貼り付けて調べて いますが例が少なく,英語の文が多いので英語の勉強も しなければいけないと思っています。
Matuidi10

2019/04/21 02:30

接続先urlを「 "jdbc:mysql://localhost:3306/sample_db?serverTimezone=JST" ; 」に変更したら データベースに繋がるようになりました。わざわざ色々と相談させて頂いて本当にありがとうございました。
takyafumin

2019/04/21 13:28

ググると同様の対策での事例がたくさん出てきますね。JDBCドライバの不具合ですかね。当初の事象から紆余曲折はありましたが解決して何よりです。
guest

0

DriverManager.getConnectionの前に以下追加してみてください

Java

1try { 2 Class.forName("com.mysql.jdbc.Driver").newInstance(); 3 con = DriverManager.getConnection(url, userName, password);

投稿2019/04/18 06:07

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Matuidi10

2019/04/18 06:09

帰宅するのが夜になるのでそれから 確認させて頂きます。回答して頂き ありがとうございます。
Matuidi10

2019/04/18 11:14

追加してみたんですがスクリプト上でエラー表示されて実行できないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問