要实现Java与MySQL数据库的连接,需完成环境准备、驱动配置、代码编写及问题排查等步骤,以下是详细操作指南,帮助开发者高效完成数据库连接。

环境准备
在开始连接前,需确保以下环境已正确配置:
Java开发环境
确保已安装JDK(推荐JDK 8或11以上版本),并配置好JAVA_HOME环境变量,可通过命令java -version验证安装是否成功。
MySQL数据库安装
下载并安装MySQL数据库(推荐5.7或8.0版本),安装完成后创建测试数据库及表,通过MySQL命令行执行:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT);
INSERT INTO users (name, age) VALUES ('Alice', 25), ('Bob', 30);
确保MySQL服务已启动,并记录下用户名、密码及端口号(默认3306)。
JDBC驱动下载
MySQL连接Java需依赖JDBC驱动(MySQL Connector/J),前往MySQL官网下载对应版本的驱动包(如.jar文件),或通过Maven/Gradle自动管理依赖(推荐后者,避免手动配置)。
JDBC驱动配置
Maven项目配置
若使用Maven管理项目,在pom.xml中添加MySQL Connector/J依赖(以8.0版本为例):

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
Maven会自动下载依赖并配置到项目中。
手动配置(非Maven项目)
下载驱动jar包后,将其添加到项目的lib目录下,并在IDE(如IntelliJ IDEA、Eclipse)中将其标记为“库”(Library):
- IntelliJ IDEA:右键项目 → Open Module Settings → Libraries → 点击“+” → Java选择jar包 → 确认添加。
- Eclipse:右键项目 → Build Path → Configure Build Path → Libraries → Add External JARs → 选择jar包。
Java连接代码编写
JDBC连接数据库的核心步骤包括:加载驱动、获取连接、执行SQL、处理结果、关闭资源,以下为完整代码示例:
基础连接示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MySQLConnectionDemo {
public static void main(String[] args) {
// 数据库连接信息(根据实际情况修改)
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "your_password";
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 1. 加载JDBC驱动(JDBC 4.1+后可省略,显式加载更明确)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取数据库连接
connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功!");
// 3. 创建Statement对象(用于执行SQL)
statement = connection.createStatement();
String sql = "SELECT id, name, age FROM users";
// 4. 执行查询,获取ResultSet结果集
resultSet = statement.executeQuery(sql);
// 5. 遍历结果集并打印
System.out.println("ID\tName\tAge");
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.println(id + "\t" + name + "\t" + age);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 关闭资源(避免内存泄漏)
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
System.out.println("资源已关闭");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
关键参数说明
- URL格式:
jdbc:mysql://主机名:端口/数据库名?参数useSSL=false:开发环境关闭SSL验证(生产环境建议开启)。serverTimezone=UTC:设置时区,避免“时区转换异常”。allowPublicKeyRetrieval=true:允许从服务器获取公钥(解决某些认证问题)。
- 驱动类名:MySQL 8.0+为
com.mysql.cj.jdbc.Driver,旧版本为com.mysql.jdbc.Driver。
常见问题解决
“No suitable driver found”错误
- 原因:驱动未加载或URL格式错误。
- 解决:检查
pom.xml依赖是否生效,或手动添加jar包;确认URL以jdbc:mysql://开头。
“Access denied for user”错误
- 原因:用户名或密码错误,或用户无访问权限。
- 解决:在MySQL中执行
GRANT ALL PRIVILEGES ON test_db.* TO 'root'@'localhost';授权(需替换为实际用户名和主机名)。
“The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized”错误
- 原因:未设置时区参数。
- 解决:在URL中添加
serverTimezone=UTC或serverTimezone=Asia/Shanghai。
连接超时
- 原因:数据库未启动,或网络无法访问MySQL端口(默认3306)。
- 解决:检查MySQL服务状态;确保防火墙允许3306端口访问;在URL中添加
connectTimeout=5000(设置连接超时时间,单位毫秒)。
最佳实践
使用连接池
直接使用DriverManager.getConnection()性能较低,生产环境推荐使用连接池(如HikariCP、Druid),以HikariCP为例:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class ConnectionPoolDemo {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("your_password");
config.setMaximumPoolSize(10); // 最大连接数
HikariDataSource dataSource = new HikariDataSource(config);
try (Connection connection = dataSource.getConnection()) {
System.out.println("连接池获取连接成功:" + connection);
} catch (Exception e) {
e.printStackTrace();
}
}
}
连接池可复用连接,减少资源消耗,提升并发性能。
防止SQL注入
使用PreparedStatement代替Statement,避免SQL注入风险:

String sql = "SELECT * FROM users WHERE name = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setString(1, "Alice"); // 参数化查询 ResultSet rs = pstmt.executeQuery();
配置文件管理连接信息
避免硬编码用户名、密码,可将配置信息存放在config.properties文件中:
db.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC db.username=root db.password=your_password
通过Properties类读取配置:
InputStream input = MySQLConnectionDemo.class.getClassLoader().getResourceAsStream("config.properties");
Properties props = new Properties();
props.load(input);
String url = props.getProperty("db.url");
String username = props.getProperty("db.username");
String password = props.getProperty("db.password");
Java连接MySQL的核心在于JDBC驱动的正确配置和连接代码的规范编写,从环境准备到连接池使用,需注意细节问题(如时区、权限、SQL注入),通过遵循最佳实践,可构建稳定、高效的数据库连接应用,实际开发中,建议结合ORM框架(如MyBatis、Hibernate)简化操作,但理解JDBC底层原理仍是必备基础。














