如何在Java中配置数据库开发环境_MySQL数据库环境搭建说明

MySQL服务未运行是Java应用连接失败的主因;需验证服务状态、添加8.3.0版mysql-connector-j驱动、配置含时区和SSL参数的JDBC URL,并通过SELECT 1测试真实连通性。

确认 MySQL 服务已正确安装并运行

很多 Java 应用启动时报 Communications link failureConnection refused,根本原因不是代码写错,而是本地根本没跑起来 MySQL。先验证服务状态:

  • Windows:打开

    任务管理器 → 服务标签页 → 找到 MySQL80(或类似名称),确保状态为“正在运行”;也可在命令行执行 sc query MySQL80
  • macOS/Linux:终端运行 brew services list | grep mysql(Homebrew 安装)或 sudo systemctl status mysql
  • 通用验证:执行 mysql -u root -p,能成功登录即说明服务就绪

添加 MySQL JDBC 驱动依赖(Maven)

Java 连 MySQL 必须通过 JDBC 驱动,版本不匹配会导致 ClassNotFoundException 或连接后无法执行某些 SQL(如 JSON 字段操作)。推荐使用官方最新稳定版:


    mysql
    mysql-connector-j
    8.3.0

注意:mysql-connector-java 已在 8.0.33 后废弃,新项目必须用 mysql-connector-j;若用旧版驱动连 MySQL 8+,可能因默认启用 caching_sha2_password 认证而报 Public Key Retrieval is not allowed 错误。

配置 JDBC URL 与连接参数

URL 格式不对是连接失败最常见原因。MySQL 8+ 默认要求显式指定时区和服务器证书策略:

  • 基础格式:jdbc:mysql://localhost:3306/your_db?serverTimezone=Asia/Shanghai&useSSL=false
  • 若仍报 Unknown system variable 'query_cache_size',说明驱动试图兼容老版本协议,加 &allowPublicKeyRetrieval=true
  • 生产环境建议启用 SSL:&useSSL=true&requireSSL=true,并配置信任库
  • 连接池(如 HikariCP)中不要在 URL 里写 autoReconnect=true —— 现代驱动已弃用该参数,应靠连接池自身的健康检查机制处理断连

测试连接是否真正可用(不只是 DriverManager.getConnection)

只调用 DriverManager.getConnection(...) 成功不代表数据库就 ready。常见陷阱是连接建立但无法执行查询,比如权限不足或表不存在:

try (Connection conn = DriverManager.getConnection(url, user, password);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT 1")) {
    if (rs.next()) {
        System.out.println("✅ 数据库连接与基础查询正常");
    }
} catch (SQLException e) {
    System.err.println("❌ 连接失败:" + e.getMessage());
}

务必加上实际查询(哪怕只是 SELECT 1),否则会掩盖 Access denied for userNo database selected 类错误。另外,Connection 对象创建后不自动校验连通性,JDBC 驱动直到第一次执行语句才真正发包到服务端。

本地开发时最容易被忽略的是 MySQL 的 bind-address 配置 —— 如果 my.cnf 里写了 bind-address = 127.0.0.1,那 localhost 走 socket 连接没问题,但换成 127.0.0.1 就可能因 DNS 解析或权限规则差异失败。