当前位置:首页 > 后端开发 > 正文

Java操作MySQL快速入门

Java连接MySQL需加载JDBC驱动,通过DriverManager获取Connection对象,创建Statement执行SQL语句,处理ResultSet结果集,最后关闭资源,常用try-with-resources确保连接释放。

在Java中使用MySQL进行数据库操作是开发中常见的需求,以下是详细步骤和最佳实践,确保代码安全高效:

环境准备

  1. 安装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 );
  2. 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(); }


      安全注意事项

      1. 永远使用PreparedStatement

        避免拼接SQL字符串,防止SQL载入攻破

      2. 敏感信息加密

        数据库密码应使用环境变量或配置中心管理

      3. 连接超时设置

        配置连接池的connectionTimeout(建议30秒)

      4. 错误日志脱敏

        禁止在日志中输出完整SQL语句和参数


      常见错误排查

      错误信息 解决方案
      No suitable driver found 检查驱动JAR是否在类路径中
      Access denied for user 核对用户名/密码,检查主机访问权限
      Communications link failure 确认MySQL服务运行,防火墙开放端口
      Too many connections 增加连接池大小或优化连接复用

      通过以上步骤,您已掌握Java操作MySQL的核心技能,实际项目中建议结合Spring Data JPA或MyBatis等ORM框架提升开发效率。


      引用说明

0