学生申请学科竞赛活动,表单中有学科竞赛的申报信息和部分附件,需要做到将上传文件和表单数据提交保持一致性。

将上传文件和插入表单数据放到事务汇总去处理,由于表单的数据我们可以控制,但是上传的文档不好控制。一方面我就把表单数据提交放置在文件上传前面,这样当表单数据提交发生异常我们可以回滚,文件并未上传,当文件上传发生异常时,我们可以回滚数据库的数据,只有当文件正常上传时我们才提交数据库数据。。。

---------------------------------------------------------------------------------------------------------------------------------------

  1. 1 @Override
  2. 2 public boolean applActivity(XkTeam team, Document doc, DocType doctype,
  3. 3 FileInputStream fin) {
  4. 4
  5. 5 boolean flag = true;
  6. 6 FileOutputStream fos = null;//文档输出流
  7. 7 // ------------处理需要向数据库提交的文档、文档类型及申报信息--------------------
  8. 8 // 开启事务,设置不自动提交
  9. 9 JDBCTools.startTransaction();
  10. 10
  11. 11 try {
  12. 12 // 判断是个人申报还是团体申报调用不同的方法
  13. 13 // 个人申报
  14. 14 if (team.getAppType() == 0) {
  15. 15
  16. 16 flag = idao.addPersonApp(team);
  17. 17 //更新当前申报人数
  18. 18 flag = idao.updateCurrentNum(team.getAppType(),1);
  19. 19 }
  20. 20
  21. 21 // 团体申报
  22. 22 if (team.getAppType() == 1) {
  23. 23
  24. 24
  25. 25 flag = idao.addTeamInfor(team);
  26. 26 flag = idao.addTeamMember(team.getMemberlist());
  27. 27 //更新当前申报人数
  28. 28 flag = idao.updateCurrentNum(team.getActiId(), team.getMemberlist().size());
  29. 29 }
  30. 30
  31. 31 if(doc != null && doctype != null){ //处理用户是否上传文档
  32. 32 // 调用dao层插入文件的方法
  33. 33 flag = idao.addDocument(doc);
  34. 34 // 调用dao层插入文件类型方法
  35. 35 flag = idao.addDocType(doctype);
  36. 36
  37. 37 // ---------------处理上传文档------------
  38. 38 // 1.创建上传文档File
  39. 39 File file = new File(doc.getDoc_path());
  40. 40 // 2.创建写文档对象
  41. 41 fos = new FileOutputStream(file);
  42. 42 // 3.创建缓冲流
  43. 43 byte[] buffer = new byte[1024];
  44. 44 int len = 0;
  45. 45 while ((len = fin.read(buffer)) > 0) {
  46. 46 // 写入文件
  47. 47 fos.write(buffer, 0, len);
  48. 48 }
  49. 49 }
  50. 50 // 提交
  51. 51 JDBCTools.commit();
  52. 52 } catch (Exception e2) {
  53. 53 e2.printStackTrace();
  54. 54 // 发生异常回滚
  55. 55 JDBCTools.rollback();
  56. 56 throw new RuntimeException("申报失败,请联系管理员!", e2);
  57. 57 } finally {
  58. 58 // 关闭资源
  59. 59 JDBCTools.setCommitTrue();
  60. 60 JDBCTools.close();
  61. 61
  62. 62 if(fos != null){
  63. 63 try {
  64. 64 fos.close();
  65. 65 } catch (IOException e) {
  66. 66 e.printStackTrace();
  67. 67 }
  68. 68 }
  69. 69 }
  70. 70
  71. 71 return flag;

Java中上传文件和表单数据提交如何保持数据的一致性?的更多相关文章

  1. el-upload上传文件和表单一起提交+后端接收代码

    目录 一.前言 二.前端页面展示 三.表单代码 四.Data部分 五.JS方法 六.后端接收方式 七.总结 一.前言 我们在做前端时,会遇到这样的需求,上传Excel文件,并且还要和填写的表单数据,一 ...

  2. 谈谈php中上传文件的处理

    这是一个表单的时代... 我们在浏览器中编辑自己的信息,会遇到上传头像:在文库中,我们会上传文档......到处存在“上传”这个词. php是最好的语言(其他语言的程序猿们不要打我...).php在处 ...

  3. 为什么上传文件的表单里要加个属性enctype

    为什么上传文件的表单里要加个属性enctype 上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上 ...

  4. Java上传文件FTP服务器代码

    1. 在实际的应用重,通常是通过程序来进行文件的上传. 2. 实现java上传文件到ftp服务器中 新建maven项目 添加依赖 <dependency> <groupId>c ...

  5. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  6.  为什么上传文件的表单里要加个属性enctype----摘录

    上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什 ...

  7. 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决

    出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...

  8. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用

    一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...

  9. java上传文件,提交表单必须要设置enctype="multipart/form-data"

    表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是application/x-www-form-urlenc ...

随机推荐

  1. 浅析若干Java序列化工具【转】

    在Java中socket传输数据时,数据类型往往比较难选择.可能要考虑带宽.跨语言.版本的兼容等问题.比较常见的做法有: 采用java对象的序列化和反序列化 把对象包装成JSON字符串传输 Googl ...

  2. .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫

    .net mvc前台如何接收和解析后台的字典类型的数据   很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...

  3. OAF_OAF控件系列2 - LOV的实现(案例)

    2014-06-02 Created By BaoXinjian

  4. Report_SRW工具的基本用法(概念)

    2014-05-31 Created By BaoXinjian

  5. C 标准IO 库函数与Unbuffered IO函数

    先来看看C标准I/O库函数是如何用系统调用实现的. fopen(3) 调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一 个FILE 结构体, 通常里面包含了: ...

  6. 采用dlopen、dlsym、dlclose加载动态链接库

    1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统 ...

  7. python 报错 SyntaxError: Non-ASCII character

    报错: SyntaxError: Non-ASCII character 概意思是,默认文件是ASCII格式,需要更改文件编码,操作是在文件首行加上 #!/usr/bin/python # -*- c ...

  8. Java简单验证码的识别

    1. 需求 因为项目需要,需要多次登录某网站抓取信息.所以学习了验证码的一些小知识.文章参考http://blog.csdn.net/problc/article/details/5794460的部分 ...

  9. ubuntu的交换分区和系统休眠

    因为休眠功能在部分计算机上不能正常工作,所以自16.04后,ubuntu不在默认开启休眠功能. 要开启休眠功能需要如下条件. 1.要有交换分区(swap). 2.交换分区的容量至少要和实际内存一样大, ...

  10. 【Android】19.1 SharedPreferences类

    分类:C#.Android.VS2015: 创建日期:2016-03-05 一.简介 SharedPreferences:简单共享存储首选项.实际上就是用加密的内部文件保存所有页面都能访问的一系列“n ...