web-dev-qa-db-ja.com

java.sql.SQLException:jdbc:mysql:// localhost:3306 / dbnameに適したドライバーが見つかりません

次のJavaプログラムがあります:MySQLConnectExample.Java

import Java.sql.*;
import Java.util.Properties;

public class MySQLConnectExample {
    public static void main(String[] args) {
        Connection conn1 = null;
        Connection conn2 = null;
        Connection conn3 = null;

        try {
            String url1 = "jdbc:mysql://localhost:3306/aavikme";
            String user = "root";
            String password = "aa";

            conn1 = DriverManager.getConnection(url1, user, password);
            if (conn1 != null)
                System.out.println("Connected to the database test1");

            String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
            conn2 = DriverManager.getConnection(url2);
            if (conn2 != null) {
                System.out.println("Connected to the database test2");
            }

            String url3 = "jdbc:mysql://localhost:3306/aavikme";
            Properties info = new Properties();
            info.put("user", "root");
            info.put("password", "aa");

            conn3 = DriverManager.getConnection(url3, info);
            if (conn3 != null) {
                System.out.println("Connected to the database test3");
            }
        } catch (SQLException ex) {
            System.out.println("An error occurred. Maybe user/password is invalid");
            ex.printStackTrace();
        }
    }
}

私はこのようにコンパイルします:

E:\Java mysql code driver>javac MySQLConnectExample.Java

E:\Java mysql code driver>Java -cp mysql-connector-Java-3.0.11-stable-bin.jar;.
MySQLConnectExample

このエラーが発生します:

An error occurred. Maybe user/password is invalid
Java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
aavikme
        at Java.sql.DriverManager.getConnection(DriverManager.Java:596)
        at Java.sql.DriverManager.getConnection(DriverManager.Java:215)
        at MySQLConnectExample.main(MySQLConnectExample.Java:20)

私は何を間違えていますか?

38
user3416261

最初にこれを実行してください:

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

これにより、ドライバーはそれ自体を強制的に登録するため、Javaはこれらのデータベース接続文字列の処理方法を認識します。

詳細については、 MySQLコネクタリファレンス を参照してください。

66
Adam Batkin

jdbc driverをロードする必要があります。以下のコードを検討してください。

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

            // connect way #1
            String url1 = "jdbc:mysql://localhost:3306/aavikme";
            String user = "root";
            String password = "aa";

            conn1 = DriverManager.getConnection(url1, user, password);
            if (conn1 != null) {
                System.out.println("Connected to the database test1");
            }

            // connect way #2
            String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
            conn2 = DriverManager.getConnection(url2);
            if (conn2 != null) {
                System.out.println("Connected to the database test2");
            }

            // connect way #3
            String url3 = "jdbc:mysql://localhost:3306/aavikme";
            Properties info = new Properties();
            info.put("user", "root");
            info.put("password", "aa");

            conn3 = DriverManager.getConnection(url3, info);
            if (conn3 != null) {
                System.out.println("Connected to the database test3");
            }
   } catch (SQLException ex) {
            System.out.println("An error occurred. Maybe user/password is invalid");
            ex.printStackTrace();
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
10
unknown

列column1、column2、column3 column4、cloumn1および2がint値を保持し、列3および4がvarchar(10)を保持するテーブルからデータを取得する例

import Java.sql.*; 
// need to import this as the STEP 1. Has the classes that you mentioned  
public class JDBCexample {
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://LocalHost:3306/databaseNameHere"; 
    // DON'T PUT ANY SPACES IN BETWEEN and give the name of the database (case insensitive) 

    // database credentials
    static final String USER = "root";
    // usually when you install MySQL, it logs in as root 
    static final String PASS = "";
    // and the default password is blank

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;

        try {
    // registering the driver__STEP 2
            Class.forName("com.mysql.jdbc.Driver"); 
    // returns a Class object of com.mysql.jdbc.Driver
    // (forName(""); initializes the class passed to it as String) i.e initializing the
    // "suitable" driver
            System.out.println("connecting to the database");
    // opening a connection__STEP 3
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
    // executing a query__STEP 4 
            System.out.println("creating a statement..");
            stmt = conn.createStatement();
    // creating an object to create statements in SQL
            String sql;
            sql = "SELECT column1, cloumn2, column3, column4 from jdbcTest;";
    // this is what you would have typed in CLI for MySQL
            ResultSet rs = stmt.executeQuery(sql);
    // executing the query__STEP 5 (and retrieving the results in an object of ResultSet)
    // extracting data from result set
            while(rs.next()){
    // retrieve by column name
                int value1 = rs.getInt("column1");
                int value2 = rs.getInt("column2");
                String value3 = rs.getString("column3");
                String value4 = rs.getString("columnm4");
    // displaying values:
                System.out.println("column1 "+ value1);
                System.out.println("column2 "+ value2);
                System.out.println("column3 "+ value3);
                System.out.println("column4 "+ value4);

            }
    // cleaning up__STEP 6
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
    //  handle sql exception
            e.printStackTrace();
        }catch (Exception e) {
    // TODO: handle exception for class.forName
            e.printStackTrace();
        }finally{  
    //closing the resources..STEP 7
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e2) {
                e2.printStackTrace();
            }try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e2) {
                e2.printStackTrace();
            }
        }
        System.out.println("good bye");
    }
}
5
dresh

私は同じ問題を抱えていました、私のコードは次のとおりです:

private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD);
private Statement stmt = conn.createStatement();

ドライバークラスをロードしていませんが、ローカルで機能し、MySQLから結果を照会できますが、Tomcatにデプロイすると機能せず、以下のエラーが発生します。

No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud

そこで、他の回答が投稿されたのを見て、以下のようにドライバークラスをロードしました。

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

今すぐ動作します!ローカルでうまく機能する理由がわかりません。あなたの助けが必要です。ありがとうございました!

5
StrongYoung

MySQL connector/J jarファイルをlibフォルダーにコピーしておらず、このファイルがクラスパスに存在している必要があります。

あなたがそうしていない場合は、私は答えを詳しく説明することを教えてください

4
inquisitive

コードにClass.forName("com.mysql.jdbc.Driver");がありません

これは、すべてが機能するために不足しているものです。

2

ここでのすべての答えは、Class.forName("my.vandor.Driver");行を使用してドライバーをロードします。

(より良い)代替手段として、JDBCドライバーを処理するいくつかのメソッドを提供するDriverManagerヘルパークラスを使用できます。

あなたはしたいかもしれない

  1. DriverManager.registerDriver(driverObject);を使用して、ドライバーをドライバーのリストに登録します

指定されたドライバーをDriverManagerに登録します。新しくロードされたドライバークラスは、registerDriverメソッドを呼び出して、DriverManagerに認識されるようにする必要があります。ドライバーが現在登録されている場合、アクションは実行されません

  1. DriverManager.deregisterDriver(driverObject);を使用して削除します。

DriverManagerの登録済みドライバーのリストから指定されたドライバーを削除します。

例:

Driver driver = new Oracle.jdbc.OracleDriver();
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url, user, password);
// ... 
// and when you don't need anything else from the driver
DriverManager.deregisterDriver(driver);

それ以上の場合、 DataSource を使用します

1
svarog