目录
- 准备工作
- 安装 MySQL 数据库
- 创建数据库和测试表
- 准备 Java 开发环境
- 核心步骤:使用 JDBC 连接
- 第 1 步:下载 MySQL JDBC 驱动 (Connector/J)
- 第 2 步:将驱动 JAR 包添加到项目中
- 第 3 步:编写 Java 连接代码
- 第 4 步:执行 SQL 语句
- 第 5 步:关闭资源
- 完整代码示例
- 最佳实践
- 使用
try-with-resources自动关闭资源 - 使用
PreparedStatement防止 SQL 注入 - 配置连接池
- 使用
- 不同项目环境下的配置
- 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 对象后,可以创建 Statement 或 PreparedStatement 来执行 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();
}
}
}
如何运行:
- 将
mysql-connector-j-8.x.x.jar文件复制到你的项目目录下。 - 在 IDE 中,右键 JAR 文件 -> "Add as Library" (在 IntelliJ IDEA 中) 或类似操作,将其添加到项目的类路径中。
- 运行
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 文件并将其添加到项目的类路径中。
-
下载
mysql-connector-j-8.x.x.jar。 -
复制 JAR 文件到你的项目目录(
lib文件夹)。 -
配置类路径:
-
在 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 数据库了。
