JSP+Servlet培训班作业管理系统[15] -事务的使用时机(以新增作业为例)
来源:互联网 发布:windows更新安装失败 编辑:程序博客网 时间:2024/05/16 00:49
猫哥最近已基本实现了JSP+Servlet培训班作业管理系统
校长、教师拥有的功能。但是一直没有什么功能是有新意的、可讲的,直到Today,猫哥发现一个非常经典的场景——数据库事务的使用场景,那就是教师发布作业,这就是一个必须(不得不)采用事务的简单场景,本篇讲述该如何设计实现。
首先必须先了解下表结构:
简单描述下:
1,system_user:用户表,需要注意user_role对应system_role的id,system_role共三种角色:校长、教师、学生2,system_course:课程表,只有教师能发布课程3,system_work:作业表,只有教师能发布课程对应的作业,也就是说一门课程可以发布多次作业4,student_lesson:学生选课表,注意lesson_user是学生user_id,而lesson_course是课程course_id5,student_job:是学生作业表,此处逻辑非常重要。如果一门课程已发布3次作业,学生选课时是看不到本门课之前发布的3次作业的(猫哥培训学校不流行补交作业,执行随到随学),学生只有选课后,才能看到教师发布的作业,才能去完成这些作业。
通过以上讨论,想必大家也明白了规则。那么重点来了,教师在发布作业,也就是教师在system_work中新增一条记录时,数据库需要做什么变化?
首先,在system_work中新增一条记录,需要注意的是作业都是归属课程的,所以新增作业时需要选定新增作业所属课程,示意图如下。
然后,需要根据student_lesson中学生已选课程的信息,在student_job中为选择作业所属课程的每名学生新增一条作业,这样每当教师发布作业后,选课了的学生接着就能看到一个自己还没做的作业。
好的,也就是说,在教师点击新增作业界面的确定按钮后,需要在system_work添加一条记录,同时需要在student_job中添加若干条记录(最少是0条,最多也不超过学生总人数,其实就是选课了的学生人数)。这两个操作必须同时成立,所以必须采用事务。
那么,为啥说必须使用事务呢,此处采用反证法证明:
1,如果不采用事务,则在多条sql先后执行时,由于数据库异常(最好理解的比如数据库所在设备停电了),则可能有些sql语句执行成功,有些失败了。2,在此情景中,如果system_work表已添加成功一条记录,而student_job中添加记录失败。则教师看到作业列表中存在这次的作业,但是学生却看不到。3,这种情景属于错误,所以必须使用事务。
好的,那么Java中如何实现事务呢,此处给出一个最简单的模版如下:
try{//第一步,将需要执行的语句放在try catch中以便捕获异常 //第二步,获取一个数据库连接,用于和数据库交互 if(conn==null)//未分配 conn=MySQLPool.getConnecton();//用时从池中取,很爽快 //第三步,开始事务后不让mysql自动提交了,程序员做主何时一起提交或者还是回退 conn.setAutoCommit(false); //第四步,执行一系列的sql操作 for(String sql:sqlList){ stmt=conn.createStatement(); stmt.executeUpdate(sql); } //此处提交事务,如果中间所有执行语句没错,则全部一起执行 conn.commit(); } catch (Exception ex) { try { //如果有错误,则回滚到所有sql未执行状态 conn.rollback(); } catch (SQLException sqlEx) { new MyException(new Date(),sqlEx.getMessage(),"事务回滚错误"); } throw new MyException(new Date(),ex.getMessage(),"数据库执行错误"); }finally{//其他事情 MySQLPool.release(conn);//用完归还 } return true;
下篇将给出新增作业功能具体的代码实现
0 0
- JSP+Servlet培训班作业管理系统[15] -事务的使用时机(以新增作业为例)
- JSP+Servlet培训班作业管理系统[16] -使用事务完成新增作业功能
- JSP+Servlet培训班作业管理系统[14] -分页(以人员管理为例)
- JSP+Servlet培训班作业管理系统[13] -使用基于Action的后端(用户登录为例)
- JSP+Servlet培训班作业管理系统[11] -通用CRUD后端的实现(以人员管理为例)
- JSP+Servlet培训班作业管理系统[12] -不止于CRUD的设计(基于动作Action)
- JSP+Servlet培训班作业管理系统[2]-后台管理页面
- JSP+Servlet培训班作业管理系统[0]-功能设计
- JSP+Servlet培训班作业管理系统[4]-记录登录用户信息
- JSP+Servlet培训班作业管理系统[7] -Mysql数据库设计
- JSP+Servlet培训班作业管理系统[1]-登录功能的简单实现
- JSP+Servlet培训班作业管理系统[9] -登录功能的实现
- JSP+Servlet培训班作业管理系统[6]-人员管理功能实现
- JSP+Servlet培训班作业管理系统[22] -番外篇之过滤器与权限管理
- JSP+Servlet培训班作业管理系统[3]-点击菜单加载功能页面
- JSP+Servlet培训班作业管理系统[5]-加载角色对应菜单
- JSP+Servlet培训班作业管理系统[8] -数据库操作层实现
- JSP+Servlet培训班作业管理系统[10] -通用CRUD后端设计
- jQuery 淡入淡出
- bzoj 4262: Sum (线段树)
- 斯坦福李飞飞教授:人口普查不用上门,谷歌街景加深度学习就搞定
- 64位的win7旗舰版的cmd下执行date /t命令,结果星期忽然没了,怎么弄?
- jQuery 滑动
- JSP+Servlet培训班作业管理系统[15] -事务的使用时机(以新增作业为例)
- Bzoj 2245: [SDOI2011]工作安排(费用流)
- 【正一专栏】萨德来了
- Java中HashMap和TreeMap的区别深入理解
- Java温习——面向对象第二部分
- 哈夫曼树
- L1-012. 计算指数
- java 中 mongodb的各种操作
- JSP+Servlet培训班作业管理系统[16] -使用事务完成新增作业功能