[MySQL]表——删除数据

文章目录

如有错误,请指正!!!

一、引言:为什么需要关注删除操作?

在数据库的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块中关闭资源?

  • 确保无论是否发生异常,资源都能被正确释放
  • 避免数据库连接泄露
相关推荐
学传打活14 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活20 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1681 个月前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心1 个月前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055271 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055271 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝1 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055271 个月前
Java图像处理实战指南
人工智能·1024程序员节
u0103055271 个月前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节