java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/dbname 的驱动程序

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22384710/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 15:26:25  来源:igfitidea点击:

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

javamysqlsqljdbcconnectivity

提问by user3416261

I have this Java program: MySQLConnectExample.java

我有这个 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();
        }
    }
}

I compile it like this:

我是这样编译的:

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

I get this error:

我收到此错误:

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)

What am I doing wrong?

我究竟做错了什么?

回答by Adam Batkin

Make sure you run this first:

确保你先运行这个:

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

This forces the driver to register itself, so that Java knows how to handle those database connection strings.

这会强制驱动程序自行注册,以便 Java 知道如何处理这些数据库连接字符串。

For more information, see the MySQL Connector reference.

有关更多信息,请参阅MySQL 连接器参考

回答by unknown

You have to load jdbc driver. Consider below Code.

你必须加载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();
   }

回答by dresh

An example of retrieving data from a table having columns column1, column2 ,column3 column4, cloumn1 and 2 hold int values and column 3 and 4 hold varchar(10)

从具有列 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");
    }
}

回答by inquisitive

You might have not copied the MySQL connector/Jjar file into the lib folder and then this file has to be there in the classpath.

您可能没有将MySQL connector/Jjar 文件复制到 lib 文件夹中,然后该文件必须在类路径中。

If you have not done so, please let me know I shall elaborate the answer

如果你还没有这样做,请让我知道我会详细说明答案

回答by Karue Benson Karue

In your code you are missing Class.forName("com.mysql.jdbc.Driver");

在您的代码中,您缺少 Class.forName("com.mysql.jdbc.Driver");

This is what you are missing to have everything working.

这是让一切正常工作所缺少的。

回答by Deathcore Ortega

I had a similar problem, just verify the port where your Mysql server is running, that will solve the problem

我遇到了类似的问题,只需验证您的Mysql服务器运行的端口,即可解决问题

For example, my code was:

例如,我的代码是:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");

i change the string to

我将字符串更改为

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");

and voila!!, this workd because my server was running on that port

瞧!!,这是可行的,因为我的服务器正在该端口上运行

Hope this help

希望这有帮助

回答by Hari Nair

try this

尝试这个

String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password); 

回答by StrongYoung

I had the same problem, my code is below:

我遇到了同样的问题,我的代码如下:

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

I have not loaded the driver class, but it works locally, I can query the results from MySQL, however, it does not work when I deploy it to Tomcat, and the errors below occur:

我没有加载驱动类,但是在本地是可以的,可以从MySQL中查询结果,但是部署到Tomcat时就不行了,出现如下错误:

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

so I loaded the driver class, as below, when I saw other answers posted:

所以当我看到其他答案发布时,我加载了驱动程序类,如下所示:

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

It works now! I don't know why it works well locally, I need your help, thank you so much!

它现在有效!我不知道为什么它在本地运行良好,我需要您的帮助,非常感谢!

回答by svarog

All of the answers here use the Class.forName("my.vandor.Driver");line to load the driver.

这里的所有答案都使用该Class.forName("my.vandor.Driver");行来加载驱动程序。

As an (better) alternative you can use the DriverManagerhelper class which provides you with a handful of methods to handle your JDBC driver/s.

作为(更好的)替代方案,您可以使用DriverManagerhelper 类,它为您提供了一些方法来处理您的 JDBC 驱动程序。

You might want to

你可能想要

  1. Use DriverManager.registerDriver(driverObject);to register your driver to it's list of drivers
  1. 用于DriverManager.registerDriver(driverObject);将您的驱动程序注册到它的驱动程序列表

Registers the given driver with the DriverManager. A newly-loaded driver class should call the method registerDriver to make itself known to the DriverManager. If the driver is currently registered, no action is taken

向 DriverManager 注册给定的驱动程序。新加载的驱动程序类应调用 registerDriver 方法以使 DriverManager 知道它自己。如果驱动程序当前已注册,则不执行任何操作

  1. Use DriverManager.deregisterDriver(driverObject);to remove it.
  1. 使用DriverManager.deregisterDriver(driverObject);将其删除。

Removes the specified driver from the DriverManager's list of registered drivers.

从 DriverManager 的已注册驱动程序列表中删除指定的驱动程序。

Example:

例子:

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);

or better yet, use a DataSource

或者更好的是,使用DataSource