You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JDBC(Java)无法连接本地MySQL数据库问题求助

解决Java JDBC无法连接本地MySQL的问题

我来帮你排查这个连接问题——既然Workbench能正常访问restdb数据库,说明MySQL服务本身没问题,问题大概率出在JDBC配置或驱动的细节上,咱们一步步来:

1. 修正JDBC URL的关键参数(最可能的原因)

MySQL 8.0+的cj系列驱动有几个必须注意的参数,你的URL里缺了关键的时区配置,而且useSSL在本地未配置SSL的情况下可能引发冲突:

  • 必须添加serverTimezone参数(比如UTC或你本地时区Asia/Shanghai),否则驱动会因为时区不匹配报错
  • 本地开发建议把useSSL设为false(除非你特意配置了MySQL的SSL)

修改后的URL示例:

String url = "jdbc:mysql://localhost:3306/restdb?useSSL=false&serverTimezone=Asia/Shanghai";

另外,autoReconnect在新版本驱动中已经不推荐使用,可暂时去掉。

2. 优化驱动注册方式

你手动调用DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());完全没必要——MySQL 8.0驱动会通过SPI机制自动注册,手动注册反而可能导致重复注册问题。直接删掉这行代码即可。

3. 确认Maven依赖的正确性

检查你的pom.xml中依赖是否正确,应该是:

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

执行mvn dependency:tree命令,查看是否有旧版本的mysql-connector-java(比如5.x版本)被意外引入——版本冲突是常见的连接失败原因,如果有冲突,用<exclusions>排除旧版本依赖。

4. 验证用户权限与凭证

虽然Workbench能连接,但还是要确认:

  • Java代码中的usernamepassword和Workbench使用的完全一致,没有拼写错误
  • 登录用户(比如root)的host权限允许localhost连接:在Workbench中执行SELECT user, host FROM mysql.user;,确保root对应的hostlocalhost%(允许所有地址)

5. 用简化代码测试并查看完整错误堆栈

你当前只打印了错误消息,很多关键细节被隐藏了。写一个极简测试类:

import java.sql.Connection;
import java.sql.DriverManager;

public class DBTest {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/restdb?useSSL=false&serverTimezone=Asia/Shanghai";
        String user = "root";
        String pass = "password";
        
        try (Connection conn = DriverManager.getConnection(url, user, pass)) {
            System.out.println("数据库连接成功!");
        } catch (Exception e) {
            e.printStackTrace(); // 打印完整堆栈,能看到更具体的错误原因
        }
    }
}

运行后如果还是失败,完整的堆栈会告诉你具体是时区问题、驱动冲突还是权限问题,方便进一步排查。


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

火山引擎 最新活动