Java操作MySQL快速入门

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

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

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包导入项目

      Java操作MySQL快速入门


建立数据库连接

使用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框架提升开发效率。

Java操作MySQL快速入门


引用说明

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/34701.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月22日 03:51
下一篇 2025年6月22日 03:59

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN