在Java应用程序中与MySQL数据库进行交互是开发中常见的需求,通常通过JDBC(Java Database Connectivity)技术实现,以下是详细的使用步骤和注意事项,帮助开发者高效、安全地完成数据库操作。

环境准备
在开始编码前,需确保以下环境配置到位:
- JDK安装:确保系统已安装Java开发工具包(JDK),建议使用JDK 8或更高版本。
- MySQL数据库:安装并启动MySQL服务,创建目标数据库及测试表。
- JDBC驱动:下载MySQL Connector/J驱动(如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()显式加载驱动类(新版JDBC驱动可自动加载,但显式声明仍推荐):
Class.forName("com.mysql.cj.jdbc.Driver");
建立连接
使用DriverManager.getConnection()方法获取数据库连接,需提供URL、用户名和密码:
String url = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "密码"; Connection conn = DriverManager.getConnection(url, user, password);
- URL参数说明:
useSSL=false:禁用SSL(测试环境适用,生产环境需配置安全证书)。serverTimezone=UTC:设置时区,避免时区警告。
关闭连接
操作完成后需关闭连接,释放资源:
if (conn != null) {
conn.close();
}
执行SQL操作
创建Statement对象
Statement stmt = conn.createStatement();
执行查询(SELECT)
使用executeQuery()方法执行查询,返回ResultSet结果集:

String sql = "SELECT * FROM users WHERE age > 18"; ResultSet rs = stmt.executeQuery(sql);
遍历结果集:
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
执行更新(INSERT/UPDATE/DELETE)
使用executeUpdate()方法,返回受影响的行数:
String sql = "UPDATE users SET age = age + 1 WHERE name = '张三'";
int affectedRows = stmt.executeUpdate(sql);
System.out.println("更新了 " + affectedRows + " 行数据");
使用PreparedStatement防止SQL注入
为提高安全性和性能,推荐使用PreparedStatement处理参数化查询:
String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery();
优势:
- 自动处理特殊字符,避免SQL注入。
- 预编译SQL语句,重复执行时性能更优。
事务管理
事务确保数据操作的原子性,通过以下步骤控制:

// 开启事务
conn.setAutoCommit(false);
try {
// 执行多个SQL操作
stmt.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
stmt.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
// 提交事务
conn.commit();
} catch (Exception e) {
// 回滚事务
conn.rollback();
e.printStackTrace();
} finally {
conn.setAutoCommit(true); // 恢复自动提交模式
}
连接池优化
直接使用DriverManager获取连接效率较低,生产环境推荐使用连接池(如HikariCP、Druid):
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/数据库名");
config.setUsername("root");
config.setPassword("密码");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();
连接池优势:
- 复用连接,减少创建和销毁开销。
- 控制最大连接数,避免数据库压力过大。
异常处理与资源释放
- 异常处理:捕获
SQLException,记录错误日志。 - 资源释放:使用
try-with-resources语句自动关闭资源(JDK 7+):try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { // 处理结果集 } catch (SQLException e) { e.printStackTrace(); }
最佳实践
- 配置外部化:将数据库连接信息(URL、用户名、密码)存储在配置文件中,避免硬编码。
- 批量操作:使用
addBatch()和executeBatch()处理大批量数据,提高效率。 - 版本兼容:注意JDBC驱动与MySQL版本的兼容性,推荐使用官方最新稳定版。
通过以上步骤和技巧,开发者可以在Java中稳定、高效地操作MySQL数据库,构建可靠的数据交互层,实际开发中需结合业务需求灵活调整,并注重代码的可维护性和安全性。




















