java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术
如题:文件信息的批量导入……
项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中的数据提取到数据库的操作,其实实现起来很简单。以下是小菜鸟我的实现思路:
1、JSP页面+Struts2实现文件上传,把定制Excel上传到服务器指定目录下,以供读取;
2、POI读取Excel表格,把数据封装为持久化实体List
3、批量导入数据库
这是TT的开发环境:
Struts2.1.6 + Spring2.5.6 + Hibernate3.3.1 + MyEclipse8.5 + tomcat5.5 + Oracle11g
需要的Jar包:SSH的就不需要说了
主要就是一个POI的包:
我这里是 poi-3.7-beta-20100620.jar,这一个jar包可以去apach的官网上下载
还有一个就是struts的IO包:
commons-io-1.3.2.jar,顾名思义:IO工具类
第一步:文件上传
这一步,网上有很多的例子:
JSP页面:
文件上传 |
Struts.xml配置文件:这里可以定制Filter,指定文件类型和最大长度,就不列举了
/page/role/roleallinput.jsp
/page/role/roleallinput.jsp
对应的applicationContext.xml配置
scope=”prototype”>
class=”com.adtec.datacenter.dao.manager.FileLoadDaoImpl”>
RoleFileUploadAction实现
这里有几个点需要注意:
上传文件的文件如果为uploadFile,那么文件名一定要为uploadFileFileName,也就是在文件后加入FileName,不然不能识别
package com.adtec.datacenter.action.manager;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.struts2.ServletActionContext;
import com.adtec.datacenter.dao.manager.FileLoadDao;
import com.adtec.datacenter.dao.manager.RoleDao;
import com.adtec.datacenter.entity.manager.PtRoleInfo;
import com.adtec.datacenter.vo.manager.RoleInfo;
import com.opensymphony.xwork2.ActionSupport;
public class RoleFileUploadAction extends ActionSupport{
private File uploadFile;
private String uploadFileFileName;
private FileLoadDao fileLoadDao;
private RoleDao roleDao;
public File getUploadFile() {
return uploadFile;
}
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
public String getUploadFileFileName() {
return uploadFileFileName;
}
public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
}
public FileLoadDao getFileLoadDao() {
return fileLoadDao;
}
public void setFileLoadDao(FileLoadDao fileLoadDao) {
this.fileLoadDao = fileLoadDao;
}
public RoleDao getRoleDao() {
return roleDao;
}
public void setRoleDao(RoleDao roleDao) {
this.roleDao = roleDao;
}
@Override
public void validate() {
super.validate();
}
public String loadRoleFile(){
String directory = “/upload/role”;
String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);
//生成上传的文件对象
File target = new File(targetDirectory,uploadFileFileName);
//如果文件已经存在,则删除原有文件
if(target.exists()){
target.delete();
}
//复制file对象,实现上传
try {
FileUtils.copyFile(uploadFile, target);
//out = response.getWriter();
//out.print(“文件上传成功!”);
} catch (IOException e) {
e.printStackTrace();
}
loadRoleInfo(uploadFileFileName);
return SUCCESS;
}
/**
* 把Excele表读出的数据,组装成一个List,统一导入数据库
* @param uploadFileFileName
*/
public void loadRoleInfo(String uploadFileFileName){
String directory = “/upload/role”;
String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);
File target = new File(targetDirectory,uploadFileFileName);
List roleList = new ArrayList();
try{
FileInputStream fi = new FileInputStream(target);
Workbook wb = new HSSFWorkbook(fi);
Sheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum()+1;
for(int i=1;i
PtRoleInfo ptRoleInfo = new PtRoleInfo();
Row row = sheet.getRow(i);
int cellNum = row.getLastCellNum();
for(int j=0;j
Cell cell = row.getCell(j);
String cellValue = null;
switch(cell.getCellType()){ //判断excel单元格内容的格式,并对其进行转换,以便插入数据库
case 0 : cellValue = String.valueOf((int)cell.getNumericCellValue()); break;
case 1 : cellValue = cell.getStringCellValue(); break;
case 2 : cellValue = String.valueOf(cell.getDateCellValue()); break;
case 3 : cellValue = “”; break;
case 4 : cellValue = String.valueOf(cell.getBooleanCellValue()); break;
case 5 : cellValue = String.valueOf(cell.getErrorCellValue()); break;
}
switch(j){//通过列数来判断对应插如的字段
case 0 : ptRoleInfo.setRoleId(cellValue);break;
case 1 : ptRoleInfo.setRoleName(cellValue);break;
case 2 : ptRoleInfo.setDeil(cellValue);break;
}
}
roleList.add(ptRoleInfo);
}
fileLoadDao.roleInfotoDB(roleList);
}catch(IOException e){
e.printStackTrace();
}
}
}
roleDao接口实现
这里接口类就不贴出来了,直接贴实现类,把持久化实体List循环写入数据库
package com.adtec.datacenter.dao.manager;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.struts2.ServletActionContext;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.adtec.datacenter.entity.manager.PtRoleInfo;
import com.adtec.datacenter.vo.manager.RoleInfo;
/**
* 文件工具类
* @author Tony
*
*/
public class FileLoadDaoImpl extends HibernateDaoSupport implements FileLoadDao {
/**
* 把从excel表读出的数据写入到数据库
*/
public void roleInfotoDB(List roleList){
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
if(roleList.size() > 0){
int roleNum = roleList.size();
for(int i=0;i
session.save(roleList.get(i));
}
/*for(Iterator iterator = roleList.iterator();iterator.hasNext();){
session.save(iterator.next());
}*/
}
tx.commit();
}catch(HibernateException e){
e.printStackTrace();
tx.rollback();
}finally{
session.close();
}
//this.getHibernateTemplate().saveOrUpdateAll(roleList);
return;
}
}
http://www.kaizea.com/?post=276
java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...相关推荐
- ant react 上传_React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design-Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- c#大文件读取和写入数据库
c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...
- python分片上传_分片上传_分片上传_上传文件_Python_SDK 示例_对象存储 OSS - 阿里云...
OSS提供的分片上传(Multipart Upload)功能,将要上传的较大文件(Object)分成多个数据块(Part)来分别上传,上传完成后再调用CompleteMultipartUpload接口 ...
- java三国英杰传_三国英杰传重点战役详细攻略(合集)
汜水关详细攻略(不消耗豆) 本来应该由小戟和自称天才来写这个攻略,可他们一直懒于应付,本人只好把自己的打法写出来供有关爱好者参考,但打法多种多样,不必拘泥于此. 本关刘备为短兵.关羽和张飞为轻骑兵.5 ...
- 读取excel日期 c++_实例9:用Python自动生成Excel档每日出货清单
公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用.要求按日期来汇总,每日只要有出货,就需要一份出货单.出货总表包含数百条出货记录.假设一年有200天都出过货,那按照常规的方法,需要从总表 ...
- excel自动保存_萌新必看!python处理excel实例
电脑上必安装的办公软件三大软件:word.excel.ppt,其中excel是在处理数据效率最高,也是最为繁琐的,因此高效快捷使用excel尤为重要,以下为大家介绍使用python更自动化处理exce ...
- excel填充序列_数据太多输不完?Excel自动填充帮你搞定
大家好,这里是有讲课堂.非常荣幸和你相遇. 最近有朋友和我说,有些功能用多了就没法察觉出它的意义了,就比如Excel的[自动填充] 仔细想想,自动填充在平时的运用其实真的很重要,很实用. 是的,自动填 ...
- 分布式 java 应用:基础与实践_单集群数据超1000亿,微服务架构下分布式数据库应用实践...
如今,大型企业的应用平台正在向微服务架构进行转型.在微服务架构下,应用程序和数据库等底层平台的关系将会被重构. 作为新一代分布式数据库,其架构与功能特性需要保证在与传统数据库全兼容的基础上,拥抱微服务 ...
- java复制屏幕文本内容_网页上的文字内容不给复制?电脑老司机教你输入一串代码,轻松复制...
原标题:网页上的文字内容不给复制?电脑老司机教你输入一串代码,轻松复制 我们有时候需要一些资料就会去网上查资料,有的时候我们需要把这些资料的文字给复制下来.但并不是所有的资料都能直接复制的,不是登陆账 ...
最新文章
- Para list设置
- 前端一HTML:二十五盒子模型
- Codeforces1019C
- 【POJ - 2728】Desert King (最有比率生成树,分数规划)
- Java程序猿面试体会,还没找到工作的“猿猿们”看过来!
- 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加
- Vue 组件 data为什么是函数
- php广告屏如何同步,户外LED大屏广告如何投放才能更吸引人?
- 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
- lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...
- WireShark抓包分析
- 28个超有用的PPT小技巧,快来收藏
- [升级凯立德地图] 升级凯立德地图 (车载 导航仪)
- 多目标跟踪算法FairMOT
- 10-新闻发布系统数据库-新闻管理数据操作
- 香港流行乐坛三十年(很好的回忆)
- hdu 1166 排兵布阵
- android实现 桌面移动悬浮窗口实现
- 数据结构学习笔记:算法复杂度的度量之“大O记号”
- 展讯走出困境开始爬坡
热门文章
- 怎样正确使用和维护微型计算机,下篇:微型计算机应该怎样进行维护与保养
- python jieba库下载_Python中jieba库安装步骤及失败原因解析
- python画图颜色种类_Python可视化|matplotlib07-python colormap(颜色映射)(三)
- java 数组 内存_图解Java数组的内存分配
- sql语句lastupdate使用数据库库函数
- html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程
- linux文件权限umask,linux系统中UMASK权限的用法讲解
- 魔兽三国服务器维护,魔兽三国开服七天技巧
- 【button】 按钮组件说明
- CSS定义字体间距 字体行与行间距