【问题标题】:No Suitable Driver Found. Java JDBC mysql connector未找到合适的驱动程序。 Java JDBC mysql 连接器
【发布时间】:2017-05-21 02:21:14
【问题描述】:

这是我的代码:

import java.sql.*;
import com.mysql.jdbc.Driver;

public class Main {

    public void connect() {
        Connection con = null;


        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql//localhost:3306/mydb", "dev", "pass");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (con != null) try { con.close(); } catch(Exception e) {}
        }
    }

    public static void main(String[] args) {
        Main m = new Main();

        m.connect();
    }
}

我已将 mysql-connector-java-5.1.39.jar 作为库导入 IntelliJ,您可以看到驱动程序已导入代码中。

但我明白了:

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

我查看了无数堆栈溢出问题,但我无法弄清楚至少尝试连接还需要什么。我有一个本地 SQL 服务器正在运行,并且我已经仔细检查了端口和数据库名称。

任何想法都将不胜感激,谢谢。

编辑:这不是重复的。某人标记的另一个问题的解决方案与此处无关。如另一个问题中所述,我已经将 jar 添加为项目的库。此外,崩溃不会发生在“Class.forName”部分,它会在后续行崩溃。

【问题讨论】:

标签: java mysql jdbc


【解决方案1】:

您缺少一个冒号。

"jdbc:mysql//localhost:3306/mydb"

应该是

"jdbc:mysql://localhost:3306/mydb"

Connecting to MySQL Using the JDBC DriverManager Interface

缺少的冒号表示驱动程序管理器将尝试查找名为"mysql//localhost" 而不是"mysql" 的驱动程序提供程序。当然,不存在这样的提供者。


代码中的 Class.forName 调用不是必需的。但是调用成功的事实是一个强有力的线索,表明问题不在于缺少驱动程序类。它应该会让读者寻找其他原因为什么DriverManager找不到驱动程序。

【讨论】:

    【解决方案2】:
    jdbc:mysql//localhost:3306/mydb
    

    mysql 后面缺少一个冒号。

    注意Class.forName()line 已经有十年没有必要了。

    【讨论】:

      【解决方案3】:

      MySQL 的 JDBC 连接字符串在 MySQL 文档中已经很好地解释了 here。基于此,您在这里所做的错误是数据库类型后冒号的简单遗漏,mysql

      你的连接字符串(虽然没有凭据)将从这里改变:

      "jdbc:mysql//localhost:3306/mydb"
      

      到这里:

      "jdbc:mysql://localhost:3306/mydb"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-20
        • 2012-04-04
        • 2016-04-02
        • 2012-07-14
        • 2020-05-02
        • 1970-01-01
        • 2012-01-15
        相关资源
        最近更新 更多