Java连接MySQL数据库是Java开发中常见的操作,主要通过JDBC(Java Database Connectivity)实现,以下是详细的步骤和代码示例,帮助开发者顺利完成连接。

环境准备
- 安装MySQL数据库:确保已安装MySQL并运行,创建测试数据库和表。
CREATE DATABASE test_db; USE test_db; CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
- 下载MySQL JDBC驱动:从MySQL官网或Maven仓库获取驱动JAR文件(如
mysql-connector-java-8.0.xx.jar),若使用Maven,在pom.xml中添加依赖:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
JDBC连接步骤
加载驱动
通过Class.forName()加载MySQL驱动类(JDBC 8.0+版本可省略此步骤,但建议保留兼容性):
Class.forName("com.mysql.cj.jdbc.Driver");
获取连接
使用DriverManager.getConnection()方法,需提供数据库URL、用户名和密码:
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "your_password"; Connection conn = DriverManager.getConnection(url, user, password);
参数说明:
url:格式为jdbc:mysql://主机名:端口/数据库名?参数,useSSL=false禁用SSL(开发环境),serverTimezone=UTC设置时区。user和password:MySQL数据库的登录凭据。
创建执行语句
通过Connection对象创建Statement或PreparedStatement:

Statement stmt = conn.createStatement();
执行SQL查询
以查询users表为例:
String sql = "SELECT * FROM users"; ResultSet rs = stmt.executeQuery(sql);
处理结果集
遍历ResultSet获取数据:
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
关闭资源
按顺序关闭ResultSet、Statement和Connection:
rs.close(); stmt.close(); conn.close();
完整代码示例
import java.sql.*;
public class MySQLConnection {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "your_password";
try {
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("数据库连接成功!");
// 3. 创建执行语句
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);
// 4. 处理结果集
System.out.println("查询结果:");
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
// 5. 关闭资源
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
System.err.println("MySQL驱动未找到!");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
}
}
}
常见问题处理
- 驱动加载失败:检查JAR包是否正确引入,驱动类名是否为
com.mysql.cj.jdbc.Driver(8.0+版本)。 - 连接超时:确保MySQL服务运行,检查防火墙或网络配置,或调整
url中的connectTimeout参数(如?connectTimeout=5000)。
使用连接池优化性能
频繁创建和关闭连接会影响性能,推荐使用连接池(如HikariCP):

- 添加HikariCP依赖:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> - 配置连接池:
HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db"); config.setUsername("root"); config.setPassword("your_password"); HikariDataSource ds = new HikariDataSource(config); Connection conn = ds.getConnection();
相关问答FAQs
问题1:MySQL连接时出现“Access denied for user”错误怎么办?
解答:该错误通常是由于用户名或密码错误,或用户没有访问指定数据库的权限,请检查MySQL用户权限,确保已授予GRANT ALL PRIVILEGES ON test_db.* TO 'root'@'localhost';,并确认密码正确。
问题2:如何处理MySQL连接中的时区问题?
解答:在JDBC URL中添加serverTimezone=UTC参数明确指定时区,例如jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC,若需其他时区(如Asia/Shanghai),替换UTC即可。
