文章目录
- 一、引言:为什么需要关注删除操作?
- 二、环境准备
-
- [2.1 技术栈要求](#2.1 技术栈要求)
- [2.2 测试数据表](#2.2 测试数据表)
- 三、基础删除操作代码解析
- 四、代码逐行详解
-
- [4.1 数据库连接配置](#4.1 数据库连接配置)
- [4.2 建立数据库连接](#4.2 建立数据库连接)
- [4.3 创建Statement对象](#4.3 创建Statement对象)
- [4.4 执行DELETE语句](#4.4 执行DELETE语句)
- [4.5 处理删除结果](#4.5 处理删除结果)
- [4.6 资源释放](#4.6 资源释放)
如有错误,请指正!!!
一、引言:为什么需要关注删除操作?
在数据库的CRUD(增删改查)操作中,删除操作是最具风险的一环。一个不小心就可能导致重要数据永久丢失。作为Java开发者,掌握如何使用JDBC安全地执行删除操作是必备技能。
删除操作的特殊性:
- 不可逆性(在没有备份的情况下)
- 可能影响数据完整性
- 涉及业务逻辑复杂性
主要关键字:
删除数据
DELETE 表名 [WHERE 条件]
二、环境准备
2.1 技术栈要求
- Java 8+
- MySQL 5.7+
- MySQL Connector/J 8.0+
- IntelliJ IDEA
2.2 测试数据表
首先创建测试用的数据表:
sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS user;
USE user;
-- 创建学生表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
);
-- 插入测试数据
INSERT INTO students (name, age) VALUES
('张三', 20),
('李四', 22),
('王五', 19),
('赵六', 21),
('钱七', 23);
三、基础删除操作代码解析
让我们从最基本的删除操作开始,逐步分析代码的每个部分:
java
package org.example;
import java.sql.*;
/**
* JDBC数据删除操作示例
*/
public class JdbcDeleteDemo {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/user?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) {
deleteStudentById(3); // 删除id为3的学生记录
}
/**
* 根据ID删除学生记录
* @param id 学生ID
*/
public static void deleteStudentById(int id) {
Connection conn = null;
Statement stmt = null;
try {
// 1. 建立数据库连接
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 2. 创建Statement对象
stmt = conn.createStatement();
// 3. 执行DELETE语句
String sql = "DELETE FROM students WHERE id = " + id;
int affectedRows = stmt.executeUpdate(sql);
// 4. 处理删除结果
if (affectedRows > 0) {
System.out.println("成功删除 " + affectedRows + " 条记录");
} else {
System.out.println("未找到ID为 " + id + " 的记录,删除失败");
}
} catch (SQLException e) {
System.err.println("删除操作失败:" + e.getMessage());
e.printStackTrace();
} finally {
// 5. 关闭资源
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
四、代码逐行详解
4.1 数据库连接配置
java
private static final String URL = "jdbc:mysql://127.0.0.1:3306/user?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
参数说明:
- URL:数据库连接字符串
- jdbc:mysql://:JDBC连接协议
- 127.0.0.1:3306:MySQL服务器地址和端口
- user:数据库名
- useSSL=false:禁用SSL(开发环境)
- serverTimezone=UTC:设置时区,避免时间错误
4.2 建立数据库连接
java
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DriverManager.getConnection()方法用于建立与数据库的连接,返回Connection对象。
4.3 创建Statement对象
java
stmt = conn.createStatement();
Statement对象用于执行静态SQL语句。
4.4 执行DELETE语句
java
String sql = "DELETE FROM students WHERE id = " + id;
int affectedRows = stmt.executeUpdate(sql);
关键点:
- executeUpdate():用于执行INSERT、UPDATE、DELETE等操作
- 返回值:受影响的行数
- 如果返回0,表示没有找到匹配的记录
4.5 处理删除结果
java
if (affectedRows > 0) {
System.out.println("成功删除 " + affectedRows + " 条记录");
} else {
System.out.println("未找到ID为 " + id + " 的记录,删除失败");
}
通过判断affectedRows的值,我们可以知道操作是否成功执行。
4.6 资源释放
java
finally {
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
为什么要在finally块中关闭资源?
- 确保无论是否发生异常,资源都能被正确释放
- 避免数据库连接泄露