You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring+JDBC连接本地MySQL 8.0.11报MySQLNonTransientConnectionException

解决MySQL 8.0.11与Spring JDBC连接异常问题

看起来你遇到的是MySQL 8.x版本和旧JDBC驱动/配置不兼容导致的连接问题,我来帮你一步步排查解决:

核心问题分析

你的MySQL版本是8.0.11,属于较新的版本,但代码里用的是旧版JDBC驱动类com.mysql.jdbc.Driver,且JDBC URL缺少MySQL 8.x要求的必要参数,这是连接失败的主要原因。

具体解决方案

1. 更换JDBC驱动类

MySQL 8.0之后官方已废弃com.mysql.jdbc.Driver,需改用新的驱动类:

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

注:JDBC 4.0及以上版本(Java 6+)可省略Class.forName()步骤,驱动会通过SPI机制自动加载;若要保留该代码,必须使用新类名。

2. 升级JDBC驱动版本

确保项目依赖的是适配MySQL 8.0的驱动版本(如mysql-connector-java:8.0.33或其他8.x系列),5.x版本驱动无法兼容MySQL 8.x。

若用Maven,在pom.xml中添加依赖:

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

3. 完善JDBC URL参数

MySQL 8.0要求必须指定时区,若遇到公钥检索权限问题,还需添加allowPublicKeyRetrieval=true参数。修改URL为:

private final String URL= "jdbc:mysql://127.0.0.1:3306/db_example?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";

serverTimezone可根据本地时区调整,比如Asia/Shanghai,避免时区不一致引发的问题。

4. 验证数据库用户权限

虽然终端能正常访问,仍可确认testuser是否拥有从127.0.0.1连接db_example的权限:
登录MySQL终端后执行:

GRANT ALL PRIVILEGES ON db_example.* TO 'testuser'@'127.0.0.1' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;

修正后的完整代码示例

private final String URL= "jdbc:mysql://127.0.0.1:3306/db_example?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
private final String DB_USERNAME = "testuser";
private final String DB_PASSWORD = "pass";
private Connection conn;

public void connectAndInsertToDB() {
    try {
        // 可选:JDBC4.0+可省略,若保留则用新驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (Exception e) {
        System.out.println("JAVA: Class.forName() error");
        e.printStackTrace();
    }
    try {
        conn = DriverManager.getConnection(URL, DB_USERNAME, DB_PASSWORD);
        System.out.println("数据库连接成功!");
        // 此处可添加数据插入逻辑
    } catch (SQLException e) {
        System.out.println("Error in initializing a connection to MYSQL DB");
        e.printStackTrace();
    }
}

额外提示

  • 若使用Spring Boot,建议通过application.properties/application.yml配置数据源,而非手动调用DriverManager,更规范且易维护。
  • 使用数据库连接后,记得通过try-with-resources语法关闭资源,避免连接泄漏。

内容的提问来源于stack exchange,提问作者user5139637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:18:05