上一篇                     
               
			  Java操作MySQL快速入门
- 后端开发
- 2025-06-22
- 5009
 Java连接MySQL需加载JDBC驱动,通过DriverManager获取Connection对象,创建Statement执行SQL语句,处理ResultSet结果集,最后关闭资源,常用try-with-resources确保连接释放。
 
在Java中使用MySQL进行数据库操作是开发中常见的需求,以下是详细步骤和最佳实践,确保代码安全高效:
环境准备
-  安装MySQL - 从MySQL官网下载安装包
- 配置root用户密码,创建测试数据库(示例库名:test_db)CREATE DATABASE test_db; CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(50) UNIQUE ); 
 
-  Java项目配置  - JDK 8+(推荐JDK 11)
- 添加MySQL驱动依赖: <!-- Maven方式 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 使用最新版本 --> </dependency>或手动下载JAR包导入项目 
 
建立数据库连接
使用JDBC连接MySQL,务必使用try-with-resources自动关闭资源:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLDemo {
    // 数据库配置(实际项目应使用配置管理)
    private static final String URL = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
    private static final String USER = "your_username";
    private static final String PASSWORD = "your_password";
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
    public static void main(String[] args) {
        try (Connection conn = getConnection()) {
            System.out.println("数据库连接成功!");
        } catch (SQLException e) {
            System.err.println("连接失败: " + e.getMessage());
        }
    }
} 
注意:
- MySQL 8.0+ 需显式指定时区(如
serverTimezone=UTC)- 生产环境必须启用SSL(
useSSL=true)
执行SQL操作
插入数据(防SQL注入)
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = getConnection();
     PreparedStatement pstmt = conn.prepareStatement(sql)) {
    pstmt.setString(1, "张三");  // 绑定第一个参数
    pstmt.setString(2, "zhangsan@example.com");
    int rows = pstmt.executeUpdate();
    System.out.println("插入行数: " + rows);
} catch (SQLException e) {
    e.printStackTrace();
} 
查询数据
String sql = "SELECT id, name, email FROM users";
try (Connection conn = getConnection();
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(sql)) {
    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String email = rs.getString("email");
        System.out.printf("ID: %d, 姓名: %s, 邮箱: %s%n", id, name, email);
    }
} catch (SQLException e) {
    e.printStackTrace();
} 
更新与删除
// 更新示例
String updateSql = "UPDATE users SET email = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(updateSql)) {
    pstmt.setString(1, "new_email@example.com");
    pstmt.setInt(2, 1);
    pstmt.executeUpdate();
}
// 删除示例
String deleteSql = "DELETE FROM users WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(deleteSql)) {
    pstmt.setInt(1, 1);
    pstmt.executeUpdate();
} 
高级实践
使用连接池(HikariCP示例)
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency> 
HikariConfig config = new HikariConfig();
config.setJdbcUrl(URL);
config.setUsername(USER);
config.setPassword(PASSWORD);
config.addDataSourceProperty("connectionTimeout", "30000");
config.addDataSourceProperty("maximumPoolSize", "20");
try (HikariDataSource ds = new HikariDataSource(config);
     Connection conn = ds.getConnection()) {
    // 使用连接操作数据库
} 
事务管理
try (Connection conn = getConnection()) {
    conn.setAutoCommit(false); // 关闭自动提交
    // 执行多个操作
    updateAccount(conn, "user1", -100); // 扣款
    updateAccount(conn, "user2", 100);  // 收款
    conn.commit(); // 提交事务
} catch (SQLException e) {
    conn.rollback(); // 回滚事务
    e.printStackTrace();
} 
安全注意事项
- 永远使用PreparedStatement
 避免拼接SQL字符串,防止SQL注入攻击
- 敏感信息加密
 数据库密码应使用环境变量或配置中心管理
- 连接超时设置
 配置连接池的connectionTimeout(建议30秒)
- 错误日志脱敏
 禁止在日志中输出完整SQL语句和参数
常见错误排查
| 错误信息 | 解决方案 | 
|---|---|
| No suitable driver found | 检查驱动JAR是否在类路径中 | 
| Access denied for user | 核对用户名/密码,检查主机访问权限 | 
| Communications link failure | 确认MySQL服务运行,防火墙开放端口 | 
| Too many connections | 增加连接池大小或优化连接复用 | 
通过以上步骤,您已掌握Java操作MySQL的核心技能,实际项目中建议结合Spring Data JPA或MyBatis等ORM框架提升开发效率。
引用说明:
- MySQL官方文档:JDBC开发指南
- Oracle JDBC教程:使用JDBC处理SQL
- OWASP安全建议:SQL注入防护
- HikariCP配置参考:GitHub文档
 
 
 
			 
			 
			 
			 
			 
			 
			 
			