Java连接MySQL需引入mysql-connector-j依赖,8.0+版本自动注册驱动,URL须含serverTimezone、characterEncoding等参数,用try-with-resources获取Connection并验证。

Java 中加载 MySQL 的 JDBC 驱动并建立 Connection 连接,核心是引入驱动包、注册驱动(现代版本可省略)、构造连接 URL 并调用 DriverManager.getConnection()。从 MySQL 8.0+ 和 JDBC 4.0 起,驱动会自动注册,无需手动 Class.forName()。
添加 MySQL Connector/J 依赖
确保项目中包含官方 JDBC 驱动(mysql-connector-j)。Maven 项目在 pom.xml 中添加:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
注意:MySQL 8.0+ 必须使用 mysql-connector-j(不是旧版 mysql-connector-java),且推荐用最新稳定版。
构造标准 JDBC 连接 URL
MySQL 8+ 推荐使用带时区和编码参数的 URL,避免乱码和时区异常。格式如下:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
jdbc:mysql://host:port/database?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
-
host:数据库地址,如
localhost或 IP -
port:默认
3306 - database:目标数据库名(需提前创建)
- serverTimezone:必须显式指定,否则可能报时区错误
-
characterEncoding:设为
utf8或utf8mb4支持 emoji -
useSSL=false:开发环境可关闭 SSL;生产建议配置 SSL 或设为
true - allowPublicKeyRetrieval=true:配合 MySQL 8 默认认证插件(caching_sha2_password)必需
获取 Connection 实例(推荐 try-with-resources)
直接调用 DriverManager.getConnection(),传入 URL、用户名和密码:
String url = "jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("连接成功:" + conn.isValid(1));
} catch (SQLException e) {
e.printStackTrace();
}
说明:
- 无需
Class.forName("com.mysql.cj.jdbc.Driver")—— JDBC 4.0+ 自动服务发现机制已内置 - 使用
try-with-resources可自动关闭连接,避免资源泄漏 - 若连接失败,常见原因包括:MySQL 未启动、用户权限不足、防火墙拦截、URL 参数缺失或错误
验证连接与简单查询示例
拿到 Connection 后,可立即执行测试语句确认连通性:
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
if (rs.next()) {
System.out.println("MySQL 版本:" + rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
这一步能快速验证驱动、网络、账号、权限是否全部就绪。


















