JDBC实现数据库增删改查

JDBC实现数据库增删改查(CRUD)笔记 | 课堂实战版

前言

这篇笔记整理了课堂上用Java JDBC操作MySQL数据库实现增删改查(CRUD)的核心代码和知识点,从基础的代码实现到可优化的点逐一梳理,方便后续回顾和巩固~

一、JDBC基础认知

JDBC(Java Database Connectivity)是Java操作关系型数据库的标准接口,核心流程分为4步:

  1. 加载数据库驱动(MySQL 8.0+驱动类:com.mysql.cj.jdbc.Driver);
  2. 获取数据库连接(指定URL、用户名、密码);
  3. 执行SQL语句(增删改用executeUpdate,查询用executeQuery);
  4. 关闭数据库连接(释放资源)。

本次实战的数据库连接信息统一为:

  • URL:jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8(may7为数据库名,指定时区+编码);
  • 用户名:root(根据自己实际);
  • 密码:111111(根据自己实际)。

二、增删改查(CRUD)实战

1. 新增(Create)------ Insert操作

核心逻辑:通过Statement.executeUpdate(sql)执行INSERT语句,返回受影响行数。

课堂实战中针对不同表(student、class、course、relationship)编写了对应的新增工具类,以AddStudentUtil为例:

java 复制代码
package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class AddStudentUtil {
    public static void main(String[] args) throws Exception {
        // 新增学生的SQL语句
        String sql = "insert into student(name,sex,age,sno,class_num) values('张兵','女',18,'20230101',1011)";
        Add(sql);
    }

    public static void Add(String sql) throws Exception {
        // 1.加载MySQL驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2.获取数据库连接
        String url = "jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";
        String username= "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url,username,password);
        // 3.执行新增SQL
        int count = conn.createStatement().executeUpdate(sql);
        // 4.关闭连接
        conn.close();
    }
}

其他新增类(AddClassUtil/AddCourseUtil/AddRelationshipUtil)逻辑完全一致,仅SQL语句针对不同表调整,核心都是调用executeUpdate执行INSERT语句。

2. 删除(Delete)------ Delete操作

核心逻辑:同样用Statement.executeUpdate(sql)执行DELETE语句,返回受影响行数。

DeleteStudentUtil为例:

java 复制代码
package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class DeleteStudentUtil {
    public static void main(String[] args) throws Exception {
        // 删除学生的SQL语句
        String sql = "delete from student where id=1";
        delete(sql);
    }

    public static void delete(String sql) throws Exception {
        // 1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2.获取连接
        String url = "jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        // 3.执行删除SQL
        int count = conn.createStatement().executeUpdate(sql);
        // 4.关闭连接
        conn.close();
    }
}

DeleteClassUtil/DeleteCourseUtil/DeleteRelationshipUtil均遵循此逻辑,仅删除的表和条件不同。

3. 修改(Update)------ Update操作

核心逻辑:还是通过Statement.executeUpdate(sql)执行UPDATE语句,返回受影响行数。

⚠️ 课堂代码里有个小笔误:UpdataCourseUtil类名拼写错误(正确应为UpdateCourseUtil),实际开发要注意命名规范~

UpdateStudentUtil为例:

java 复制代码
package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;

public class UpdateStudentUtil {
    public static void main(String[] args) throws Exception {
        // 修改学生信息的SQL语句
        String sql = "update student set name='王王' where id=3";;
        Update(sql);
    }

    public static void Update(String sql) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url ="jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url,username,password);
        int count = conn.createStatement().executeUpdate(sql);
        conn.close();
    }
}

UpdateClassUtil/UpdateRelationshipUtil/UpdataCourseUtil都是修改不同表的字段,核心逻辑无差异。

4. 查询(Retrieve)------ Select操作

查询和增删改不同,需要用Statement.executeQuery(sql)执行SELECT语句,返回ResultSet结果集,再遍历结果集获取数据。

课堂示例SearchUtil(查询relationship表):

java 复制代码
package com.qcby;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class SearchUtil {
    public static void main(String[] args) throws Exception {
        String sql = "select * from relationship";
        search(sql);
    }

    public static void search(String sql) throws Exception {
        // 1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2.获取连接
        String url = "jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        // 3.执行查询SQL,获取结果集
        ResultSet rs = conn.createStatement().executeQuery(sql);
        // 4.遍历结果集
        while (rs.next()) {
            String id=rs.getString("id");
            String sno=rs.getString("sno");
            String cno=rs.getString("cno");
            System.out.println(id);
            System.out.println(sno);
            System.out.println(cno);
            System.out.println("-----------------");
        }
    }
}

三、代码优化点(课堂延伸)

课堂上的代码是最基础的实现,实际开发中需要优化以下几点:

  1. 重复代码封装 :驱动加载、连接获取、连接关闭这些逻辑在每个类中都重复了,可封装成JDBCUtil工具类,减少冗余;
  2. 资源安全关闭 :当前代码直接conn.close(),如果执行SQL时抛出异常,连接可能无法关闭,需用try-catch-finally或JDK7+的try-with-resources自动关闭资源;
  3. SQL注入风险 :使用Statement执行SQL存在注入风险,建议替换为PreparedStatement(预编译SQL);
  4. 命名规范统一 :比如DeleteStudentUtil的方法是delete(小写),其他删除类是Delete(大写),类名/方法名要统一;
  5. 异常处理 :当前代码直接throws Exception,实际需捕获具体异常(如ClassNotFoundException/SQLException)并合理处理。

四、总结

本次课堂实战的核心是掌握JDBC操作数据库的核心流程:

复制代码
加载驱动 → 获取连接 → 执行SQL → 处理结果 → 关闭连接

增删改的核心是executeUpdate(返回受影响行数),查询的核心是executeQuery(返回结果集)。

这些基础代码是理解JDBC的关键,后续学习中可以基于此封装工具类、引入数据库连接池(如Druid)、结合ORM框架(如MyBatis)进一步简化开发,但底层的JDBC逻辑是根基,一定要吃透~

相关推荐
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第84题】【Mysql篇】第14题:为什么用 InnoDB 存储引擎的表建议用整型的自增主键?
java·开发语言·数据库·mysql·面试
张彦峰ZYF7 小时前
检索增强生成(RAG)系统的基础:全面深入矢量数据库
数据库·大模型·rag
Elastic 中国社区官方博客8 小时前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
一 乐8 小时前
高校实习信息发布网站|基于Spring Boot的高校实习信息发布网站的设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·高校实习信息发布网站
zgl_200537798 小时前
源代码:跨数据库通用SQL语法解析与标注拆解
大数据·数据库·数据仓库·sql·etl·源代码管理
雪度娃娃9 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
暴力求解9 小时前
Mysql数据库基础
数据库·mysql·操作系统
意倾城10 小时前
MySQL最左前缀匹配原则
数据库·mysql
暴躁小师兄数据学院10 小时前
【AI大数据工程师特训笔记】第13讲:数据库性能手术刀
大数据·数据库·数据仓库·sql·postgresql
步十人10 小时前
【Redis】持久化机制
数据库·redis·缓存