JDBC 简介
JDBC(Java Database Connectivity)是 Java 提供的用于连接和操作数据库的标准 API。它允许 Java 程序通过统一的接口访问多种关系型数据库(如 MySQL、Oracle、PostgreSQL 等),执行 SQL 语句并处理结果。
JDBC 的核心功能包括:
- 连接数据库
- 执行 SQL 语句(增删改查)
- 处理查询结果
- 管理事务
环境准备
-
安装数据库
使用 MySQL 作为示例数据库,需提前安装并启动 MySQL 服务。 -
创建数据库和表
在 MySQL 中执行以下 SQL 创建数据库和表:CREATE DATABASE IF NOT EXISTS student_db; USE student_db; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT );
-
IDE 配置
使用 IntelliJ IDEA 创建 Java 项目,并配置 JDBC 驱动依赖。
项目搭建步骤
1. 创建 Maven 项目
在 IDEA 中新建 Maven 项目,配置 pom.xml
添加 MySQL JDBC 驱动依赖:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.34</version>
</dependency>
</dependencies>
2. 编写 JDBC 代码
创建 JdbcDemo.java
文件,实现以下功能:
- 连接数据库
- 插入一条学生数据
- 查询所有学生数据
import java.sql.*;
public class JdbcDemo {
// 数据库连接信息
private static final String URL = "jdbc:mysql://localhost:3306/student_db";
private static final String USER = "root";
private static final String PASSWORD = "your_mysql_password";
public static void main(String[] args) {
Connection connection = null;
try {
// 1. 加载驱动(可选,JDBC 4.0+ 自动加载)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
connection = DriverManager.getConnection(URL, USER, PASSWORD);
// 3. 插入数据
insertStudent(connection, "张三", 20);
// 4. 查询数据
queryStudents(connection);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 5. 关闭连接
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
// 插入学生数据
private static void insertStudent(Connection connection, String name, int age) throws SQLException {
String sql = "INSERT INTO student (name, age) VALUES (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, name);
statement.setInt(2, age);
int rows = statement.executeUpdate();
System.out.println("插入成功,影响行数: " + rows);
}
}
// 查询所有学生
private static void queryStudents(Connection connection) throws SQLException {
String sql = "SELECT * FROM student";
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.printf("ID: %d, 姓名: %s, 年龄: %d\n", id, name, age);
}
}
}
}
代码逻辑详解
1. 数据库连接
DriverManager.getConnection()
用于建立与数据库的连接,需传入 URL、用户名和密码。- MySQL 的 URL 格式:
jdbc:mysql://主机:端口/数据库名
。
2. 执行 SQL
- 插入数据:使用
PreparedStatement
防止 SQL 注入,通过?
占位符动态设置参数。 - 查询数据:通过
ResultSet
遍历结果集,逐行获取字段值。
3. 资源释放
- 所有 JDBC 资源(
Connection
、Statement
、ResultSet
)需在finally
块中关闭,避免内存泄漏。
运行结果
- 控制台输出插入成功的日志:
插入成功,影响行数: 1
- 查询结果示例:
ID: 1, 姓名: 张三, 年龄: 20
常见问题
- 驱动报错
确认pom.xml
中的 MySQL 驱动版本与本地 MySQL 版本匹配。 - 连接失败
检查 MySQL 服务是否启动,用户名和密码是否正确。 - 时区问题
在 URL 中添加时区参数:jdbc:mysql://localhost:3306/student_db?serverTimezone=UTC