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;
  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/7474754.html
Copyright © 2011-2022 走看看