Java中加载JDBC驱动的两种方式是显式加载(调用Class.forName触发静态代码块注册)和自动加载(JDBC 4.0+通过SPI机制由ServiceLoader自动发现注册),前者适用于老项目或需控制时机的场景,后者为现代默认行为,要求驱动JAR在类路径中。

加载 JDBC 驱动的两种方式
Java 中加载数据库驱动,本质是让 DriverManager 知道可用的驱动实现类。现代开发中主要有两种做法:
-
显式加载(传统写法):调用
Class.forName("com.mysql.cj.jdbc.Driver"),触发驱动类的静态代码块完成注册。适用于老项目或需明确控制加载时机的场景。 -
自动加载(JDBC 4.0+ 默认行为):只要 JDBC 驱动 JAR 包在类路径(如 Maven 的
mysql-connector-java)中,JVM 启动时会通过ServiceLoader自动发现并注册驱动,无需手动调用Class.forName。
注意:MySQL 8.0+ 推荐使用 com.mysql.cj.jdbc.Driver;若用旧版驱动(如 5.x),对应类名为 com.mysql.jdbc.Driver,但已不建议继续使用。
建立数据库连接的关键参数
连接靠 DriverManager.getConnection() 方法,核心是三个参数:URL、用户名、密码。其中 URL 格式因数据库而异,必须准确:
-
MySQL 示例:
jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC -
PostgreSQL 示例:
jdbc:postgresql://localhost:5432/mydb -
Oracle 示例:
jdbc:oracle:thin:@localhost:1521:orcl
URL 中常带连接属性,比如 MySQL 的 serverTimezone 防止时区报错,useSSL=false 在本地测试时可简化配置(生产环境应启用 SSL)。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
完整连接代码示例(含异常处理)
实际编码要兼顾健壮性,推荐用 try-with-resources 管理资源:
String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("连接成功!");
// 后续执行查询、更新等操作
} catch (SQLException e) {
System.err.println("连接失败:" + e.getMessage());
}
这里不需要显式 conn.close(),因为 try-with-resources 会在退出时自动关闭。SQLException 是唯一必须捕获的检查异常。
常见问题与验证方法
连接失败时,先确认以下几点:
- 驱动 JAR 是否真正引入项目(Maven 检查
dependency是否生效,IDE 查看 External Libraries) - 数据库服务是否运行(如 MySQL 的 mysqld 进程是否启动)
- URL 中的主机、端口、数据库名是否拼写正确,权限账号是否有访问目标库的授权
- 首次连接 MySQL 8.0+ 时,若提示“Public Key Retrieval is not allowed”,可在 URL 加
&allowPublicKeyRetrieval=true&useSSL=false
简单验证驱动是否就位,可打印已注册驱动:Arrays.asList(DriverManager.getDrivers()).forEach(System.out::println);


















