当前位置: 首页 > news >正文

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为例:

packagecom.qcby.sql;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassAddStudentUtil{publicstaticvoidmain(String[]args)throwsException{// 新增学生的SQL语句Stringsql="insert into student(name,sex,age,sno,class_num) values('张兵','女',18,'20230101',1011)";Add(sql);}publicstaticvoidAdd(Stringsql)throwsException{// 1.加载MySQL驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.获取数据库连接Stringurl="jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";Stringusername="root";Stringpassword="123456";Connectionconn=DriverManager.getConnection(url,username,password);// 3.执行新增SQLintcount=conn.createStatement().executeUpdate(sql);// 4.关闭连接conn.close();}}

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

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

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

packagecom.qcby.sql;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;publicclassDeleteStudentUtil{publicstaticvoidmain(String[]args)throwsException{// 删除学生的SQL语句Stringsql="delete from student where id=1";delete(sql);}publicstaticvoiddelete(Stringsql)throwsException{// 1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.获取连接Stringurl="jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";Stringusername="root";Stringpassword="123456";Connectionconn=DriverManager.getConnection(url,username,password);// 3.执行删除SQLintcount=conn.createStatement().executeUpdate(sql);// 4.关闭连接conn.close();}}

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

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

核心逻辑:还是通过Statement.executeUpdate(sql)执行UPDATE语句,返回受影响行数。
⚠️ 课堂代码里有个小笔误:UpdataCourseUtil类名拼写错误(正确应为UpdateCourseUtil),实际开发要注意命名规范~

UpdateStudentUtil为例:

packagecom.qcby.sql;importjava.sql.Connection;importjava.sql.DriverManager;publicclassUpdateStudentUtil{publicstaticvoidmain(String[]args)throwsException{// 修改学生信息的SQL语句Stringsql="update student set name='王王' where id=3";;Update(sql);}publicstaticvoidUpdate(Stringsql)throwsException{Class.forName("com.mysql.cj.jdbc.Driver");Stringurl="jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";Stringusername="root";Stringpassword="123456";Connectionconn=DriverManager.getConnection(url,username,password);intcount=conn.createStatement().executeUpdate(sql);conn.close();}}

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

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

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

packagecom.qcby;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;publicclassSearchUtil{publicstaticvoidmain(String[]args)throwsException{Stringsql="select * from relationship";search(sql);}publicstaticvoidsearch(Stringsql)throwsException{// 1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.获取连接Stringurl="jdbc:mysql://localhost:3306/may7?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8";Stringusername="root";Stringpassword="123456";Connectionconn=DriverManager.getConnection(url,username,password);// 3.执行查询SQL,获取结果集ResultSetrs=conn.createStatement().executeQuery(sql);// 4.遍历结果集while(rs.next()){Stringid=rs.getString("id");Stringsno=rs.getString("sno");Stringcno=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逻辑是根基,一定要吃透~

http://www.jsqmd.com/news/794356/

相关文章:

  • Cursor智能体开发:Agent 模式
  • 把边界立起来,理解 ABAP Cloud 的几根主梁
  • LangChain详解
  • SpringBoot的服装商城系统毕设源码
  • Unity路网建模踩坑实录:OpenDRIVE解析中那些“反直觉”的几何参数(hdg, curvature到底怎么算?)
  • 渗透测试技巧(七)| 系统提权
  • 从 CDS 到服务契约,读懂 ABAP Cloud 的 Model-Driven Architecture
  • openwrt--by--myself
  • PyTorch 为什么现在要把 `Helion` 推到台前:它不是“又一个 Triton 替代品”,真正稀缺的是可移植 kernel authoring 这层
  • Java 开发问题:ArrayList 容量误解导致越界
  • 别再瞎学 C 语言了!真・胎教级入门教程 | NO.3 万字详解分支与循环 | 下篇
  • 从混淆矩阵到mIOU:手把手解析语义分割核心评价指标
  • Unity RenderTexture进阶:从刮刮乐到可擦写3D表面(Shader与LineRenderer实战)
  • 离线式SMPS输入整流器设计与优化指南
  • web项目工程搭建、Result封装类、部门功能的增删改查和日志技术Logback
  • ImageGlass深度解析:打造Windows平台高效图像浏览的实战指南
  • DISTINCT 带 WHERE 仍全表扫描?两层优化刀法拆解
  • 鸿蒙与 H5 通信使用的方法及原理
  • 如何彻底解决显卡驱动残留问题?Display Driver Uninstaller深度解析指南
  • 英伟达400亿投资帝国:从卖芯片到控生态,黄仁勋的AI全链路野心
  • PCI、PCIe与InfiniBand接口技术对比与应用解析
  • 百度网盘直链解析技术深度解析:突破限速壁垒的工程实践
  • 【测试方案_100 BASE-T1】快速掌握100BASE-T1 PMA物理层一致性测试
  • MySQL索引失效
  • MCP协议实战:outx-mcp-server如何安全扩展AI工具调用能力
  • 基于 Harmony6.0 的城市空气质量监测页面开发实践:ArkUI 页面构建与跨端能力深度解析
  • PX4 Firmware V1.14.4 开源支持
  • Claude代码自动模式:跳过权限的更安全方式 Claude Code auto mode: a safer way to skip permissions —— Anthropic
  • 量子去极化信道与3槽序列纯化策略解析
  • SecureVault - 基于新范式的Windows文件加密工具