杰瑞科技汇

Java如何连接MySQL数据库?

目录

  1. 准备工作
    • 安装 MySQL 数据库
    • 创建数据库和测试表
    • 准备 Java 开发环境
  2. 核心步骤:使用 JDBC 连接
    • 第 1 步:下载 MySQL JDBC 驱动 (Connector/J)
    • 第 2 步:将驱动 JAR 包添加到项目中
    • 第 3 步:编写 Java 连接代码
    • 第 4 步:执行 SQL 语句
    • 第 5 步:关闭资源
  3. 完整代码示例
  4. 最佳实践
    • 使用 try-with-resources 自动关闭资源
    • 使用 PreparedStatement 防止 SQL 注入
    • 配置连接池
  5. 不同项目环境下的配置
    • Maven 项目
    • Gradle 项目
    • 普通项目 (手动添加 JAR)

准备工作

a. 安装 MySQL 数据库

确保你已经安装并运行了 MySQL 数据库,如果没有,请从 MySQL 官网 下载并安装。

b. 创建数据库和测试表

登录到你的 MySQL 服务器(可以使用命令行或如 Navicat, DBeaver 等客户端工具),执行以下 SQL 语句来创建一个测试数据库和一张用户表。

-- 创建一个名为 'java_test' 的数据库
CREATE DATABASE IF NOT EXISTS java_test;
-- 使用这个数据库
USE java_test;
-- 创建一张 'users' 表
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);
-- 插入一些测试数据
INSERT INTO users (username, password, email) VALUES
('zhangsan', '123456', 'zhangsan@example.com'),
('lisi', '654321', 'lisi@example.com');

c. 准备 Java 开发环境

确保你已经安装了 JDK(Java Development Kit)和一个 IDE(如 IntelliJ IDEA, Eclipse, VS Code)。


核心步骤:使用 JDBC 连接

JDBC (Java Database Connectivity) 是 Java 用于执行 SQL 语句的 API,它为不同的数据库提供了统一的访问方式。

第 1 步:下载 MySQL JDBC 驱动 (Connector/J)

JDBC 只是一个规范,要让 Java 能够和 MySQL 通信,你需要 MySQL 官方提供的 JDBC 驱动程序。

  • 下载地址: MySQL Connector/J 下载页
  • 选择版本: 选择与你 MySQL 版本和 JDK 版本兼容的驱动,最新版的驱动可以很好地支持较新的 MySQL 和 JDK。
  • 下载文件: 下载一个 ZIP 压缩包,解压后你会找到一个类似 mysql-connector-j-8.x.x.jar 的文件,这就是我们需要的驱动包。

第 2 步:将驱动 JAR 包添加到项目中

根据你的项目类型,添加驱动的方式不同(详见第 5 部分)。

第 3 步:编写 Java 连接代码

连接数据库需要几个关键信息:

  • URL: 数据库的地址。
    • 格式: jdbc:mysql://[主机名]:[端口号]/[数据库名]
    • 示例: jdbc:mysql://localhost:3306/java_test
    • 如果是远程服务器,将 localhost 换成服务器的 IP 地址。
  • 用户名: 数据库的用户名,通常是 root
  • 密码: 数据库用户的密码。

第 4 步:执行 SQL 语句

成功获取 Connection 对象后,可以创建 StatementPreparedStatement 来执行 SQL 查询、更新等操作。

第 5 步:关闭资源

数据库连接(Connection)、语句对象(Statement)和结果集(ResultSet)都是非常宝贵的系统资源,使用完毕后必须关闭,否则会导致资源泄漏。强烈推荐使用 try-with-resources 语句来自动管理这些资源。


完整代码示例

这是一个完整的、使用 try-with-resources 的示例,它会连接到数据库,查询 users 表,并打印出结果。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MysqlJdbcExample {
    // 数据库连接信息
    private static final String DB_URL = "jdbc:mysql://localhost:3306/java_test?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root"; // 你的数据库用户名
    private static final String PASS = "your_password"; // 你的数据库密码
    public static void main(String[] args) {
        // try-with-resources 语句会自动关闭 Connection, Statement, 和 ResultSet
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT id, username, email FROM users")) {
            // 检查连接是否成功
            if (conn != null) {
                System.out.println("连接 MySQL 数据库成功!");
            }
            // 遍历结果集
            System.out.println("ID\t用户名\t\t邮箱");
            System.out.println("----------------------------------");
            while (rs.next()) {
                // 通过列名获取数据,更安全
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String email = rs.getString("email");
                System.out.printf("%d\t%s\t\t%s\n", id, username, email);
            }
        } catch (SQLException e) {
            System.err.println("数据库连接或查询失败!");
            e.printStackTrace();
        }
    }
}

如何运行:

  1. mysql-connector-j-8.x.x.jar 文件复制到你的项目目录下。
  2. 在 IDE 中,右键 JAR 文件 -> "Add as Library" (在 IntelliJ IDEA 中) 或类似操作,将其添加到项目的类路径中。
  3. 运行 MysqlJdbcExample.java

输出结果:

连接 MySQL 数据库成功!
ID  用户名     邮箱
----------------------------------
1   zhangsan        zhangsan@example.com
2   lisi        lisi@example.com

最佳实践

a. 使用 try-with-resources

如上面的示例所示,try-with-resources 是 Java 7+ 引入的一个特性,它可以确保任何实现了 AutoCloseable 接口的资源(如 Connection, Statement, ResultSet)在 try 块执行完毕后自动关闭,即使发生了异常,这是目前最推荐的方式。

b. 使用 PreparedStatement 防止 SQL 注入

对于包含用户输入的 SQL 查询,永远不要使用字符串拼接来构建 SQL 语句,这极易受到 SQL 注入攻击。PreparedStatement 是预编译的 SQL 语句,它使用参数( 占位符)来接收数据,可以有效防止注入。

// 不安全的做法 (SQL注入风险)
String username = "admin' OR '1'='1";
String sql = "SELECT * FROM users WHERE username = '" + username + "'";
// 安全的做法 (使用PreparedStatement)
String sql = "SELECT * FROM users WHERE username = ?";
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
     PreparedStatement pstmt = conn.prepareStatement(sql)) {
    // 设置参数,索引从 1 开始
    pstmt.setString(1, username);
    try (ResultSet rs = pstmt.executeQuery()) {
        // 处理结果...
    }
} catch (SQLException e) {
    e.printStackTrace();
}

c. 配置连接池

每次执行数据库操作都创建和销毁连接是非常消耗性能的,在高并发应用中,必须使用数据库连接池来管理连接。

  • 什么是连接池: 它是一个预先创建好并维护一定数量数据库连接的容器,当需要连接时,从池中获取;用完后,归还到池中,而不是直接关闭。
  • 常用连接池:
    • HikariCP: 目前性能最好、最流行的连接池,是 Spring Boot 2.x 的默认连接池。
    • Druid: 阿里开源的连接池,功能强大,自带监控界面。
    • C3P0: 一个老牌的连接池,但性能和功能不如前两者。

使用 HikariCP 的简单示例:

在 Maven pom.xml 中添加依赖:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version> <!-- 使用最新版本 -->
</dependency>

修改 Java 代码:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class HikariCPExample {
    public static void main(String[] args) {
        // 1. 配置 HikariCP
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/java_test?useSSL=false&serverTimezone=UTC");
        config.setUsername("root");
        config.setPassword("your_password");
        config.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 连接池大小
        config.setMaximumPoolSize(10);
        // 2. 创建数据源
        HikariDataSource dataSource = new HikariDataSource(config);
        // try-with-resources 会自动关闭 Connection
        try (Connection conn = dataSource.getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT username FROM users")) {
            System.out.println("从 HikariCP 连接池获取连接成功!");
            while (rs.next()) {
                System.out.println("用户: " + rs.getString("username"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 3. 应用关闭时,关闭数据源
            if (dataSource != null && !dataSource.isClosed()) {
                dataSource.close();
            }
        }
    }
}

不同项目环境下的配置

a. Maven 项目

这是最推荐的方式,你只需要在 pom.xml 文件中添加依赖即可,Maven 会自动下载和管理驱动包。

<!-- pom.xml -->
<dependencies>
    <!-- MySQL Connector/J -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version> <!-- 使用与驱动下载页一致的版本 -->
    </dependency>
    <!-- 如果你使用 HikariCP -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>5.0.1</version>
    </dependency>
</dependencies>

添加后,IDE 会自动识别并下载。

b. Gradle 项目

build.gradle 文件中添加依赖。

// build.gradle
dependencies {
    // MySQL Connector/J
    implementation 'com.mysql:mysql-connector-j:8.0.33'
    // 如果你使用 HikariCP
    implementation 'com.zaxxer:HikariCP:5.0.1'
}

c. 普通项目 (手动添加 JAR)

对于没有使用构建工具的项目,你需要手动下载 JAR 文件并将其添加到项目的类路径中。

  1. 下载 mysql-connector-j-8.x.x.jar

  2. 复制 JAR 文件到你的项目目录(lib 文件夹)。

  3. 配置类路径:

    • 在 IDE 中: 右键项目 -> Build Path / Project Structure -> Libraries -> Add External JARs... -> 选择你的 JAR 文件。

    • 在命令行编译和运行时:

      # 编译 (将所有 .java 文件编译到 out 目录)
      javac -cp ".;lib/mysql-connector-j-8.x.x.jar" src/com/example/*.java
      # 运行 (注意类路径的顺序,当前目录 "." 必须在最前面)
      java -cp ".;lib/mysql-connector-j-8.x.x.jar" com.example.MysqlJdbcExample

      注意:在 Linux 或 macOS 上,类路径的分隔符是 ,而不是 。

步骤 关键点 说明
准备 安装 MySQL, 创建数据库和表, 准备 JDK 确保环境可用
获取驱动 下载 mysql-connector-j.jar 这是 Java 和 MySQL 沟通的桥梁
添加驱动 Maven/Gradle 依赖 或 手动添加到 classpath 让 JVM 能找到驱动类
编写代码 DriverManager.getConnection() 获取数据库连接对象
执行SQL Connection.createStatement() / prepareStatement() 执行查询或更新
处理结果 ResultSet 遍历查询结果
关闭资源 try-with-resources 至关重要,防止资源泄漏
最佳实践 PreparedStatement + 连接池 (HikariCP) 保证安全和高性能

遵循以上步骤和最佳实践,你就可以稳定、安全地在 Java 应用中连接和操作 MySQL 数据库了。

分享:
扫描分享到社交APP
上一篇
下一篇