环境配置与依赖管理
在使用Java连接MySQL数据库之前,需要完成必要的环境准备工作,确保你的系统已安装Java开发工具包(JDK),建议版本为JDK 8或更高,可通过java -version命令验证安装状态,需安装MySQL数据库服务器,并创建一个用于测试的数据库及用户,例如创建名为test_db的数据库,并授予用户java_user的访问权限。

核心依赖是MySQL提供的Java驱动程序(JDBC驱动),若使用Maven管理项目,在pom.xml文件中添加以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
若不使用Maven,可从MySQL官网下载JDBC驱动JAR包,并将其添加到项目的类路径(Classpath)中。
连接数据库的基本步骤
Java连接MySQL数据库的核心是通过JDBC(Java Database Connectivity) API实现,以下是详细步骤:
加载JDBC驱动
JDBC驱动是一个实现了java.sql.Driver接口的类,加载驱动是建立连接的前提,通过Class.forName()方法动态加载驱动类:
Class.forName("com.mysql.cj.jdbc.Driver");
注意:MySQL 8.0及以上版本的驱动类名为com.mysql.cj.jdbc.Driver,旧版本(如5.1.x)为com.mysql.jdbc.Driver。
建立数据库连接
加载驱动后,使用DriverManager.getConnection()方法获取数据库连接对象,该方法需传入三个参数:数据库URL、用户名和密码。
- 数据库URL格式:
jdbc:mysql://[主机名]:[端口号]/[数据库名]?[参数]- 主机名:MySQL服务器地址,本地测试用
localhost或0.0.1; - 端口号:默认为
3306; - 数据库名:已创建的数据库(如
test_db); - 参数:可选,如
useSSL=false(禁用SSL,本地测试常用)、serverTimezone=UTC(设置时区)。
- 主机名:MySQL服务器地址,本地测试用
示例代码:
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"; String username = "java_user"; String password = "your_password"; Connection connection = DriverManager.getConnection(url, username, password);
若连接成功,connection对象将代表与数据库的会话。

创建执行SQL语句的对象
获取连接后,需通过Connection对象创建Statement或PreparedStatement对象,用于执行SQL语句。
- Statement:用于执行静态SQL语句,存在SQL注入风险,适合简单查询。
Statement statement = connection.createStatement();
- PreparedStatement:预编译SQL语句,可防止SQL注入,适合参数化查询,推荐使用。
String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); // 设置参数
执行SQL语句并处理结果
根据需求调用executeQuery()(查询)或executeUpdate()(增删改)方法。
- 查询操作:返回
ResultSet对象,包含查询结果集。ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { String name = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println("Name: " + name + ", Age: " + age); } - 增删改操作:返回受影响的行数。
String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement insertStatement = connection.prepareStatement(sql); insertStatement.setString(1, "Alice"); insertStatement.setInt(2, 25); int rowsAffected = insertStatement.executeUpdate(); System.out.println("插入 " + rowsAffected + " 行数据");
关闭资源
为避免资源泄漏,需按逆序关闭ResultSet、Statement/PreparedStatement和Connection对象:
if (resultSet != null) resultSet.close(); if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close();
建议使用try-finally或try-with-resources(Java 7+)确保资源释放,
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
// 执行SQL操作
} catch (SQLException e) {
e.printStackTrace();
}
常见问题与解决方案
连接失败:Access denied
原因:用户名或密码错误,或用户未授予访问权限。
解决:检查username和password是否正确,登录MySQL执行GRANT ALL PRIVILEGES ON test_db.* TO 'java_user'@'localhost';授权。
时区错误:The server time zone value ‘XXX’ is unrecognized
原因:MySQL服务器时区与JVM时区不一致。
解决:在数据库URL中添加serverTimezone=UTC参数,或修改MySQL配置文件my.ini(Windows)或my.cnf(Linux)设置默认时区。
SSL连接问题
原因:MySQL 8.0+默认启用SSL,但本地测试环境未配置证书。
解决:在URL中添加useSSL=false参数(仅限开发环境,生产环境需配置SSL)。
驱动版本不兼容
原因:JDBC驱动版本与MySQL服务器版本不匹配。
解决:下载与MySQL服务器版本兼容的驱动,例如MySQL 8.0服务器推荐使用8.0.x版本的驱动。

最佳实践与优化建议
-
使用连接池:
直接创建和关闭连接性能较低,推荐使用连接池(如HikariCP、Druid)管理数据库连接,HikariCP是高性能连接池示例:HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db"); config.setUsername("java_user"); config.setPassword("your_password"); HikariDataSource dataSource = new HikariDataSource(config); Connection connection = dataSource.getConnection(); -
防止SQL注入:
始终使用PreparedStatement处理用户输入,避免拼接SQL字符串。 -
事务管理:
通过connection.setAutoCommit(false)开启事务,执行完成后调用commit()提交,异常时调用rollback()回滚:try { connection.setAutoCommit(false); // 执行多个SQL操作 connection.commit(); } catch (SQLException e) { connection.rollback(); e.printStackTrace(); } -
日志记录:
使用SLF4J+Logback等日志框架记录SQL执行和异常信息,便于调试。
通过以上步骤和注意事项,你可以稳定高效地使用Java连接MySQL数据库,从基础的环境配置到高级的连接池优化,逐步实践将帮助你掌握数据库操作的核心技能。


















