首页 > 解决方案 > 无法使用 JDBC 驱动程序连接到本地主机上的 MySQL

问题描述

我无法连接到在我自己的机器上运行的 MySQL 实例,但我对情况的了解不足以诊断问题。

public void readDataBase() throws Exception {
    Connection connection = null;
    Class.forName("com.mysql.jdbc.Driver");
   
    String url = "jdbc:mysql://localhost:3306/tmlschedule";
    
    try {

        connection = DriverManager.getConnection(url, "user", "pass");
   
    } catch (Exception e) {
        throw e;
    } finally {
        close();
    }
}

.getConnection()使用以下堆栈跟踪调用throws:

Exception in thread "main"
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Could not create connection to database server.     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.jdbc.Util.handleNewInstance(Util.java:411)     at
com.mysql.jdbc.Util.getInstance(Util.java:386)  at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)  at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)   at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)   at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)   at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2570)
    at
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2306)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:839)    at
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)  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.jdbc.Util.handleNewInstance(Util.java:411)     at
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:421)  at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:350)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)     at
java.sql.DriverManager.getConnection(DriverManager.java:247)    at
tmlSchedule.MySQLAccess.readDataBase(MySQLAccess.java:22)   at
tmlSchedule.TmlSchedule.main(TmlSchedule.java:9) Caused by:
java.lang.NullPointerException  at
com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3281)
    at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1940)
    at
com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1866)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1252)    at
com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2488)
    at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2521)
    ... 14 more

到目前为止我所做的:

任何帮助将非常感激。

编辑:

试图弄清楚 MySQL 和驱动程序的版本控制时,我感到非常困惑。

$ zipgrep 'Bundle-Version' /usr/share/java/mysql-connector-java.jar返回:

META-INF/MANIFEST.MF:Bundle-Version: 5.1.25`

$ mysql --version返回:

mysql Ver 8.0.12 for Linux on x86_64 (MySQL Community Server - GPL)

这表明驱动程序已过时,但我通过此处列出的 yum repo 安装了 MySQL ,我想它会为我提供与数据库匹配的驱动程序。我还尝试通过此处列出的 rpm 包安装 Connector/J 8.0 ,但收到以下消息,这对我来说没有意义:

已经安装了包 mysql-connector-java-1:5.1.25-3.el7.noarch(比 mysql-connector-java-8.0.12-1.el7.noarch 更新)

标签: javamysqljdbc

解决方案


由于多种原因,应用程序可能无法连接到数据库。其中之一是没有使用正确的驱动程序软件(又名 JDBC 驱动程序)。

在这种情况下,验证与数据库服务器本身兼容的 jdbc 驱动程序版本的使用解决了该问题。

可以从这里获得正确的驱动软件。

可以从命令提示符验证 MySQL 服务器版本:首先,启动 MySQL 客户端并从那里使用命令mysql> select version();


推荐阅读