【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server [duplicate]Java:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接[重复]
【发布时间】:2018-10-15 02:48:54
【问题描述】:

我是数据库新手,刚开始学习它们。我有 MySQL Server 8.0.、Workbench 8.0、Java 连接器 5.1.31、Java 1.8 本身。按照新手如何开始的多个指南。

原来如此。我在本地主机上有数据库,并通过工作台和 Windows 提示成功连接到它。但是在我在java中执行代码之后:

        Driver sqlDriver = new FabricMySQLDriver();
        DriverManager.registerDriver(sqlDriver);
        Connection sqlConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=root", "root", "root");

我收到异常com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

为什么会发生?我试图重新安装 MySQL,清理操作系统变量,到处找,找不到解决方案。很高兴在这里找到它。

更新:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    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:408)
    at com.mysql.jdbc.Util.getInstance(Util.java:383)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1023)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2407)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2328)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    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:408)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at com.company.Main.main(Main.java:11)
Caused by: java.lang.NullPointerException
    at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3309)
    at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1985)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2508)
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2346)
    ... 13 more

【问题讨论】:

  • 请发布完整的异常堆栈跟踪,它提供了更多信息来确定根本原因。无论如何,MySQL Connector/J 已经很老了,您可能想尝试更新版本,例如 5.1.46 或 8.0.11。另请注意,您可能不应该使用FabricMySQLDriver,更不用说自己注册了。
  • @MarkRotteveel 谢谢。尝试了连接器版本 5.1.46,它可以工作。用我之前的完整堆栈跟踪更新了头消息
  • @MarkRotteveel 为什么我不应该使用 FabricMySQLDriver?这是错误的还是多余的?
  • Fabric 驱动程序用于高可用性 MySQL 部署,我认为您不会使用它。最重要的是,它需要一个特定的 JDBC URL(fabric 需要 jdbc:mysql:fabric: 作为前缀),所以现在你只是使用自动加载的普通驱动程序。

标签: java mysql jdbc


【解决方案1】:

问题在于旧版本的 MySQL Connector/J 与 MySQL 8 的兼容性。您需要升级到 MySQL Connector/J 5.1.46 或 - 更好 - 8.0.11(或更高版本)。

【讨论】:

  • 谢谢你救了我...:)
  • 非常感谢,真的拯救了我的一天 :)
  • 感谢它正在使用 8.0.16
  • @YehanPemarathne 您可能要考虑升级到 8.0.x 驱动程序,即使您继续使用 5.1.x,也要升级到最新的 5.1.x,即 5.1.49。跨度>
  • @MarcoSchoolenberg 对于 MariaDB,您应该使用 MariaDB Java 连接器,可从mariadb.com/downloads/#connectors 获得
【解决方案2】:

在我的例子中,我使用 Maven Dependency 来使用 JDBC 连接器。我只是更改了依赖项的版本。这对我有用

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>

添加以下版本就可以了:

<mysql.driver.version>8.0.20</mysql.driver.version>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2016-08-18
    • 2017-05-29
    • 2022-01-13
    相关资源
    最近更新 更多