您的位置:首页 > 编程语言 > Java开发

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

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

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

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

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐