zoukankan      html  css  js  c++  java
  • Java中上传文件和表单数据提交如何保持数据的一致性?

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

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

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

     1     @Override
     2     public boolean applActivity(XkTeam team, Document doc, DocType doctype,
     3             FileInputStream fin) {
     4 
     5         boolean flag = true;
     6         FileOutputStream fos = null;//文档输出流
     7         // ------------处理需要向数据库提交的文档、文档类型及申报信息--------------------
     8         // 开启事务,设置不自动提交
     9         JDBCTools.startTransaction();
    10 
    11         try {
    12             // 判断是个人申报还是团体申报调用不同的方法
    13             // 个人申报
    14             if (team.getAppType() == 0) {
    15                 
    16                 flag = idao.addPersonApp(team);
    17                 //更新当前申报人数
    18                 flag = idao.updateCurrentNum(team.getAppType(),1);
    19             }
    20 
    21             // 团体申报
    22             if (team.getAppType() == 1) {
    23                 
    24                 
    25                 flag = idao.addTeamInfor(team);
    26                 flag = idao.addTeamMember(team.getMemberlist());
    27                 //更新当前申报人数
    28                 flag = idao.updateCurrentNum(team.getActiId(), team.getMemberlist().size());
    29             }
    30             
    31          if(doc != null && doctype != null){ //处理用户是否上传文档
    32             // 调用dao层插入文件的方法
    33              flag = idao.addDocument(doc);
    34              // 调用dao层插入文件类型方法
    35              flag = idao.addDocType(doctype);
    36              
    37              // ---------------处理上传文档------------
    38              // 1.创建上传文档File
    39              File file = new File(doc.getDoc_path());
    40              // 2.创建写文档对象
    41              fos = new FileOutputStream(file);
    42              // 3.创建缓冲流
    43              byte[] buffer = new byte[1024];
    44              int len = 0;
    45              while ((len = fin.read(buffer)) > 0) {
    46                  // 写入文件
    47                  fos.write(buffer, 0, len);
    48              }
    49          }
    50             // 提交
    51             JDBCTools.commit();
    52         } catch (Exception e2) {
    53             e2.printStackTrace();
    54             // 发生异常回滚
    55             JDBCTools.rollback();
    56             throw new RuntimeException("申报失败,请联系管理员!", e2);
    57         } finally {
    58             // 关闭资源
    59             JDBCTools.setCommitTrue();
    60             JDBCTools.close();
    61             
    62             if(fos != null){
    63                 try {
    64                     fos.close();
    65                 } catch (IOException e) {
    66                     e.printStackTrace();
    67                 }
    68             }
    69         }
    70 
    71         return flag;
  • 相关阅读:
    ant构建Jmeter脚本的build文件配置(build.xml)
    Jmeter加密函数__digest总结
    Python接口自动化测试脚本-实现禅道登录
    转载:windows下安装mac虚拟机(Vmvare+mac)
    jstat监控JVM内存使用、GC回收情况
    Pycharm添加Python文件模板
    总结:Jmeter常用参数化方式
    Mysql添加索引及索引的优缺点
    Mysql常用语法
    性能测试中TPS上不去的原因
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/7474754.html
Copyright © 2011-2022 走看看