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;
Java中上传文件和表单数据提交如何保持数据的一致性?的更多相关文章
- el-upload上传文件和表单一起提交+后端接收代码
目录 一.前言 二.前端页面展示 三.表单代码 四.Data部分 五.JS方法 六.后端接收方式 七.总结 一.前言 我们在做前端时,会遇到这样的需求,上传Excel文件,并且还要和填写的表单数据,一 ...
- 谈谈php中上传文件的处理
这是一个表单的时代... 我们在浏览器中编辑自己的信息,会遇到上传头像:在文库中,我们会上传文档......到处存在“上传”这个词. php是最好的语言(其他语言的程序猿们不要打我...).php在处 ...
- 为什么上传文件的表单里要加个属性enctype
为什么上传文件的表单里要加个属性enctype 上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上 ...
- Java上传文件FTP服务器代码
1. 在实际的应用重,通常是通过程序来进行文件的上传. 2. 实现java上传文件到ftp服务器中 新建maven项目 添加依赖 <dependency> <groupId>c ...
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
- 为什么上传文件的表单里要加个属性enctype----摘录
上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然.那到底为什 ...
- 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决
出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...
- java上传文件,提交表单必须要设置enctype="multipart/form-data"
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是application/x-www-form-urlenc ...
随机推荐
- 谈谈easyui datagrid 的数据加载(转)
这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...
- C# 添加Windows服务,定时任务
源码下载地址:http://files.cnblogs.com/files/lanyubaicl/20160830Windows%E6%9C%8D%E5%8A%A1.zip 步骤 一 . 创建服务项目 ...
- python学习笔记013——推导式
1 推导式简介 推导式comprehensions(又称解析式),是Python的一种独有特性. 推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 推导式有三种形式: 1)列表推导式 (li ...
- DBA_实践指南系列4_Oracle Erp R12系统备份和恢复Backup(案例)
2013-12-04 Created By BaoXinjian
- LevelDB场景分析4--BackgroundCompaction
1.DBImpl::Open uint64_t new_log_number = impl->versions_->NewFileNumber(); WritableF ...
- Hive学习之函数DDL和Show、Describe语句
创建/删除函数 创建暂时函数 以下的语句创建由class_name实现的暂时函数,该函数被创建后仅仅能够在当前会话中使用.会话结束后函数失效. 实现函数的类能够是Hive类路径中的随意类.能够使用Ad ...
- 计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
程序猿都非常懒.你懂的! java程序猿在实际的开发中会遇到非常多的单位换算问题.今天我给大家带来的是关于计算机硬盘大小的换算.多数情况下.一般要求b,kb,mb,gb,tb,pb之间的大小转换,我们 ...
- get_class 返回对象的类名
get_class — 返回对象的类名 传一个对象,可以把这个对象的类名返回出来(字符串) 参考: http://php.net/manual/zh/function.get-class.php
- Maven Docker镜像使用技巧
摘要: Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能.本文以Maven为例介绍了Docker在应用构建中的一些常见技巧. Maven是目前最流行的Java项目 ...
- JDK1.5新特性,语言篇
Java 1.5版本,就是Java 2 Standard Edition 5,Version 1.5,简称Java 5.版本代号Tiger. 一. 泛型(Generics) C++通过模板技术可以指定 ...