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

Java连接MySQL数据库报错,求教JDBC:mysql URL配置方法

嘿,作为编程新手遇到数据库连接问题太正常啦,我来帮你理清楚JDBC连接MySQL的URL配置要点,还有你代码里需要调整的地方~

正确配置JDBC MySQL URL的核心要点

MySQL的JDBC URL格式会根据MySQL版本(5.x vs 8.x)略有差异,核心结构是:
jdbc:mysql://[主机名]:[端口号]/[数据库名]?[参数键值对]

  • 主机与端口:默认是localhost3306,如果你的MySQL不是默认端口,一定要补全端口号,比如jdbc:mysql://localhost:3307/universitas
  • 数据库名:你写的universitas没问题,但要确保这个数据库已经在MySQL里创建好了
  • 必加参数(尤其是MySQL 8.x)
    • useSSL=false:本地开发时关闭SSL连接,避免不必要的警告或报错
    • serverTimezone=UTC(或你的本地时区,比如Asia/Jakarta):MySQL 8.x强制要求指定时区,否则会抛出时区相关的SQLException
    • allowPublicKeyRetrieval=true:如果遇到公钥检索失败的错误,加上这个参数就能解决
你的代码需要调整的几个地方
  1. 驱动类适配版本

    • 如果你用的是MySQL 8.x,驱动类已经从com.mysql.jdbc.Driver更新为com.mysql.cj.jdbc.Driver,旧驱动在新版本MySQL下会直接报错
    • 另外,JDBC 4.0+之后不需要手动调用DriverManager.registerDriver(),只要项目里引入了驱动依赖,Driver类会自动注册,删掉那行代码反而更规范
  2. URL补充必要参数
    你当前的URLjdbc:mysql://localhost/universitas缺少时区等关键参数,MySQL 8.x下肯定会报错,建议改成:
    String url = "jdbc:mysql://localhost/universitas?useSSL=false&serverTimezone=UTC";

  3. 错误处理更精准
    你现在只打印了固定的错误提示,根本没法定位具体问题,建议改成打印异常的详细信息:

    catch (SQLException t) {
        System.out.println("数据库连接错误详情: " + t.getMessage());
        t.printStackTrace(); // 打印完整堆栈,方便排查问题根源
    }
    
  4. 变量名规范修正
    你的密码变量名是pasword,拼写少了一个s,虽然不影响运行,但规范起见建议改成password

修正后的完整代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ClassNotFoundException;

public class KoneksiDatabase {
    private static Connection koneksi;

    public static Connection getKoneksi() {
        if (koneksi == null) {
            try {
                // MySQL 8.x 驱动类,若用5.x则换回 com.mysql.jdbc.Driver
                Class.forName("com.mysql.cj.jdbc.Driver");
                String url = "jdbc:mysql://localhost/universitas?useSSL=false&serverTimezone=UTC";
                String user = "root";
                String password = "kendo"; // 修正拼写
                koneksi = DriverManager.getConnection(url, user, password);
                System.out.println("数据库连接成功啦!");
            } catch (ClassNotFoundException e) {
                System.out.println("找不到JDBC驱动类: " + e.getMessage());
                e.printStackTrace();
            } catch (SQLException t) {
                System.out.println("数据库连接错误详情: " + t.getMessage());
                t.printStackTrace();
            }
        }
        return koneksi;
    }

    // 可以加个主方法快速测试连接
    public static void main(String[] args) {
        getKoneksi();
    }
}

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

火山引擎 最新活动