找不到合适的司机。 Java JDBC mysql连接器

时间:2017-05-21 02:21:15

标签: java mysql jdbc

这是我的代码:

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"部分,它在后续行崩溃。

3 个答案:

答案 0 :(得分:2)

您缺少一个冒号角色。

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

应该是

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

请参阅Connecting to MySQL Using the JDBC DriverManager Interface

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

您的代码中的Class.forName调用不是必需的。但是,呼叫成功的事实是一个强有力的线索,问题不是驱动程序类丢失。它应该使读者找到其他原因为什么DriverManager无法找到驱动程序。

答案 1 :(得分:1)

jdbc:mysql//localhost:3306/mydb

mysql之后您缺少一个冒号。

注意,Class.forName()行已经十年不用了。

答案 2 :(得分:0)

在MySQL文档中已经很好地解释了MySQL的JDBC连接字符串here。基于此,你在这里做的错误是在数据库类型mysql

之后的冒号错过了

你的连接字符串(虽然没有凭据)会改变:

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

对此:

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