校园报修数据库项目实训总结,难点剖析 + 问题解决方案 + 个人成长收获
2026/6/26 7:01:08 网站建设 项目流程

本次实训核心任务是独立完成校园报修管理系统全流程开发,其中数据库设计、JDBC 数据交互、分层数据处理是整个项目的核心重难点。 从最开始搭建数据库表结构、设计 ER 实体关系,到 DAO 层封装数据库操作、Servlet 处理工单业务(报修提交、接单、状态流转、全量工单查询),过程中踩了大量数据库相关 bug。

一、实训项目整体完成情况

数据库设计三张核心业务表:user用户表、repair_type维修分类表、repair_order报修工单表,通过实体关系 ER 图梳理一对多业务关联。

数据库相关全部实现功能

  1. 数据库基础搭建:创建库、建表、设置 utf8mb4 字符集、主键自增、唯一约束;
  2. 工具类封装:DBUtil 统一管理数据库连接、资源关闭,解决重复代码问题;
  3. 用户数据库操作:账号登录、注册,基于 role 字段实现多角色权限区分;
  4. 报修分类管理:新增分类、查询全部分类,校验分类名称重复;
  5. 学生端数据库功能:提交报修工单,自动存入学生姓名、默认待接单状态;
  6. 维修员核心数据库功能:接单绑定维修人员、修改工单为维修中;维修完成更新状态 + 保存维修备注;单独修改工单备注;通用状态切换;
  7. 管理员功能:状态数字转中文展示;
  8. 数据安全处理:使用 PreparedStatement 预编译 SQL,杜绝 SQL 注入;空值统一处理避免空指针;JSON 特殊字符转义防止前端解析失败。

二、项目数据库开发核心难点与完整解决思路

难点 1:MySQL8 版本连接报错、时区异常、驱动类路径错误

问题现象
  1. 提示时区无法识别;
  2. 驱动类找不到com.mysql.jdbc.Driver
  3. 数据库连接间歇性失败。
产生原因

MySQL5 与 MySQL8 驱动不兼容,新版驱动增加时区强制校验,同时驱动路径增加cj包层级。

解决思路
  1. 修改驱动类为com.mysql.cj.jdbc.Driver
  2. URL 拼接必备参数:serverTimezone=Asia/Shanghai&useSSL=false
  3. 统一使用 mysql-connector-java 8.x 版本驱动包,放入 WEB-INF/lib 并导入库。

难点 2:数据库资源泄漏,项目长时间运行卡顿、连接耗尽

问题现象

运行多次增删改查后,页面无响应,数据库拒绝新连接。

产生原因

每次 JDBC 操作后未关闭 Connection、PreparedStatement、ResultSet,数据库连接无法回收。

解决思路

封装 DBUtil 工具类重载两个 close 方法:

查询操作关闭 conn、pstmt、rs;

增删改操作关闭 conn、pstmt; 所有 DAO、Servlet 原生 SQL 操作统一在 finally 块调用关闭方法,保证无论是否异常都释放资源。

难点 3:SQL 注入安全风险,直接拼接参数查询

问题现象

最初测试时直接字符串拼接账号密码 SQL,存在注入漏洞。

解决思路

全部 SQL 改用 PreparedStatement 占位符?传参,参数与 SQL 语句分离,数据库预编译执行,彻底防止注入攻击。

难点 4:新增报修分类名称重复,数据库唯一约束报错

问题现象

重复添加相同维修分类,抛出 SQL 唯一约束异常,程序直接崩溃。

解决思路
  1. 数据表 type_name 设置 UNIQUE 唯一索引;
  2. Servlet 捕获 SQLIntegrityConstraintViolationException 专属异常,弹窗提示用户分类已存在,区分普通数据库异常。

难点 5:中文乱码问题(数据库、后端、前端三层乱码)

问题现象

报修地址、故障描述存入数据库中文乱码,页面读取显示问号。

解决思路
  1. 创建数据库指定字符集 utf8mb4,数据表统一 CHARSET=utf8mb4;
  2. Servlet 顶部统一设置 request 编码 UTF-8、response 返回编码 UTF-8;
  3. JSON 接口返回时指定响应类型application/json;charset=UTF-8

三、实训学习收获

1. 夯实 JDBC 底层数据库操作原理

实训前只会简单写查询 SQL,本次完整掌握 JDBC 完整流程:加载驱动→获取连接→创建预编译对象→执行 SQL→关闭资源。理解了工具类封装的意义,不再重复编写连接、关闭代码,代码规范化程度大幅提升。同时分清 Statement 与 PreparedStatement 的安全差异,建立数据安全意识。

2. 掌握规范数据库表设计思路

学会从业务需求拆解实体、绘制 ER 实体关系图,合理设计主键、自增、唯一约束、字段类型。理解一对多业务关系在数据库中的体现,懂得根据业务场景选择 tinyint/varchar 等字段节省存储空间,学会区分必填、可空字段。

3. 建立分层开发思维,解耦数据与业务逻辑

真正理解 DAO 分层的作用:所有数据库操作统一封装,Servlet 只负责接收参数、调用 DAO、页面跳转。后续修改表字段、调整 SQL 语句只需要改动 DAO 层,不会影响前端控制逻辑,代码维护难度显著降低。

4. 学会数据库异常处理与排错思路

先检查数据库连接参数→核对 SQL 字段名、占位符数量→校验参数传递是否为空→查看资源是否关闭→判断字符集编码问题。遇到数据库报错不再盲目复制搜索,能够自主定位问题根源。

5. 理解业务数据流转与数据一致性

通过工单接单、完工、状态流转功能学会使用单条 UPDATE 语句同时修改多个字段,保证一次请求中数据同步更新,避免分步更新造成数据不一致。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询