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

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

ただいまの
回答率

90.51%

  • Java

    15788questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    6978questions

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

  • Eclipse

    1916questions

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

eclipseとmysqlが接続できない

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 932

nononon

score 2

前提・実現したいこと

ほぼ全くの初心者なのですが、eclipseで作ったプロジェクトのlibフォルダにmysql-connector-java-5.1.47-bin.jarを入れて接続しようとしましたがつながりません。

発生している問題・エラーメッセージ

ドライバのロードに失敗しました
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:905)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:830)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at MyQuery.main(MyQuery.java:18)
Caused by: com.mysql.cj.exceptions.CJException: Access denied for user ''@'localhost' (using password: NO)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:129)
    at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:809)
    at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:734)
    at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:702)
    at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:132)
    at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:540)
    at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)
    at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1442)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
    at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:849)
    ... 7 more

該当のソースコード

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MyQuery {

    public static void main(String[] args) {
        // TODO 自動生成されたメソッド・スタブ

        Connection conn = null;
        String url = "jdbc:mysql://localhost/helloworld?useSSL=false&requireSSL=false";
        String user = "root";
        String password = "password";
        String msg = "";

        try {
            // ドライバロード
            Class.forName("com.mysql.jdbc.Driver");

            // MySQLに接続
            conn = DriverManager.getConnection(url, user, password);

            // ステートメント生成
            Statement stmt = conn.createStatement();

            // SQLを実行
            ResultSet rs = stmt.executeQuery("SELECT * FROM test");

            // 結果行をループ
            while(rs.next()){
                // レコードの値
                int Field = rs.getInt("helloworld");

                //表示
                System.out.println(Field);
            }

            // 接続を閉じる
            rs.close();
            stmt.close();
        }catch (ClassNotFoundException e){
            msg = "ドライバのロードに失敗しました";
            System.out.println(msg);
            e.printStackTrace();
        }catch (Exception e){
            msg = "ドライバのロードに失敗しました";
            System.out.println(msg);
            e.printStackTrace();
        }
    }
}


と出てしまうのでmysql-connector-java-5.1.47-bin.jarを入れるフォルダが間違っているのかなと思っています。

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

このサイト通りに進めればできるなどあれば教えてください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/12/13 15:15

    Orlofskyさん
    編集された形跡がないのでおそらく最初からあります。

    キャンセル

  • Orlofsky

    2018/12/13 15:29

    見落としていました。
    相変わらず、markdown の指摘をしても無視する人が多い。
    コードは https://teratail.com/help#about-markdown の[コードを入力]を使ってください。

    キャンセル

  • nononon

    2018/12/13 15:43

    すみません、使い方を知りませんでした、教えて頂きありがとうございます。

    キャンセル

回答 2

+1

エラーメッセージが下記のとおり出力されています。

Caused by: java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)


DriverManager.getConnectionでユーザとパスワードが必要では

DriverManager.getConnection( url, user, password );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 16:14

    DriverManager.getConnection( url, user, password );で入力しなおしてみたところ
    Thu Dec 13 16:12:37 JST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    というエラーになりました。

    キャンセル

  • 2018/12/13 16:24

    URLにuseSSL=falseとあるので大丈夫だと思ってました。
    下記のような記事がありましたので、ご参考まで。
    URLのパラメータに「useSSL=false&requireSSL=false」を付与する。

    https://qiita.com/KKZ@github/items/a898c52ac16a5215af32

    キャンセル

  • 2018/12/13 16:27

    解決しないようであれば、設定ファイル my.cnfに下記を追加してみる方法もあるようです。
    [mysqld]セクションに

    skip_ssl
    ↑を追加

    https://hacknote.jp/archives/24742/

    キャンセル

  • 2018/12/14 10:58

    useSSL=false&requireSSL=falseを入れたところエラーは何も表示されなくはなったのですが、テーブル情報の取得もできませんでした、SQL文が何か間違っているのでしょうか。

    キャンセル

  • 2018/12/14 11:07

    SQLが間違っているとExceptionが発生すると思います。
    テーブルにデータが無い以外は、申し訳ございませんがわからないです。

    キャンセル

  • 2018/12/14 14:20

    +--------------------+
    | Database |
    +--------------------+
    | helloworld |
    | information_schema |
    | mysql |
    | performance_schema |
    | sakila |
    | sys |
    | world |
    +--------------------+
    7 rows in set (0.01 sec)

    mysql> use helloworld;
    Database changed
    mysql> show tables;
    +----------------------+
    | Tables_in_helloworld |
    +----------------------+
    | test |
    +----------------------+
    1 row in set (0.00 sec)

    mysql> desc test;
    +------------+--------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +------------+--------------+------+-----+---------+-------+
    | helloworld | varchar(255) | YES | | NULL | |
    +------------+--------------+------+-----+---------+-------+
    1 row in set (0.00 sec)

    このようにデータベースは作ってあるのですが・・・

    キャンセル

  • 2018/12/14 14:52

    ソースでは、テーブル testhelloworldをselectしていますが、
    String sqlStr = "SELECT * FROM testhelloworld";

    データベース helloworldの中には、testというテーブルしかないようですが。

    キャンセル

  • 2018/12/14 15:12

    変えて実行してみたのですが変わりませんでした。

    キャンセル

  • 2018/12/14 15:18

    testテーブルには、helloworld(文字列型)というカラムしかありませんが、
    プログラムでは、user_id, user_nameというカラムを取ろうとしています。

    変えて実行されたとのことで、「変えた」とは何をどういうふうに変えたのでしょうか?

    キャンセル

  • 2018/12/14 15:33

    すみません、今質問文の該当のソースコードを変えたものに変更しました。

    キャンセル

  • 2018/12/14 15:36

    test テーブルのカラム:helloworldはvarcharですので、
    記載のソースコード
    int Field = rs.getInt("helloworld");
    ではなく、
    String field = rs.getString("helloworld");

    ではないでしょうか?

    キャンセル

0

単に入れるだけではなくビルドパスで指定しないと連携できなかったような気がします。

あとはドライバ指定が古いのかもしれません。

Class.forName("org.gjt.mm.mysql.Driver");


Class.forName("com.mysql.jdbc.Driver");

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/13 14:40

    今ビルドパスからビルドパスの構成、ライブラリに追加してやってみたのですがダメでした。

    キャンセル

  • 2018/12/13 14:41

    でしたらこっちですね。
    https://www.sakatakoichi.com/entry/20080730/1217380723

    > org.gjt.mm.mysql.Driverは旧式のドライバ。 com.mysql.jdbc.Driverを使うこと

    キャンセル

  • 2018/12/13 14:43

    一応、回答にもともと貼った記事にもjdbcドライバーを使うように書いてあります。

    キャンセル

  • 2018/12/13 15:16

    変えてみたのですが、実行を押してからちょっと結果が出るまで遅くなったのですが、結果は変わりませんでした。

    キャンセル

  • 2018/12/13 15:21

    なるほど。
    現在のコードを質問本文に反映していただけますか?
    コードは選択状態にしてcodeボタンを押してください。
    あとは…Exception拾ったときのメッセージが同じではどちらを通ってるかわからないので変更した上で
    e.printStackTrace()とかe.getMessage()とかくっつけてシステムから吐き出されたエラーを出力するようにして内容確認してください

    キャンセル

  • 2018/12/13 15:51

    質問本文に反映いたしました。

    キャンセル

  • 2018/12/13 15:53 編集

    余計なものはいってませんか?
    com.mysql.cj.jdbc.Driver ではなく
    com.mysql.jdbc.Driver
    手打ちではなくコピペしてください。

    cj.はどこから来たんだろう・・・

    キャンセル

  • 2018/12/13 15:58

    と思ったんですが、違うかもしれませんね。
    エラーメッセージのほうをざっくりしか見れてませんでした。失礼。

    キャンセル

  • 2018/12/13 16:21

    ところでMySQLは起動しているのでしょうか。

    キャンセル

  • 2018/12/13 16:31

    はい、MySQLは起動しています、データでベースもテーブルも作成してあります。

    キャンセル

  • 2018/12/13 16:33

    了解です。でしたらドライバ以降の問題ですね。

    キャンセル

同じタグがついた質問を見る

  • Java

    15788questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    6978questions

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

  • Eclipse

    1916questions

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