文件上传方法,使用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文件读取并写入数据库技术...相关推荐

  1. ant react 上传_React实战之Ant Design—Upload上传_附件上传

    React实战之Ant Design-Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...

  2. c#大文件读取和写入数据库

    c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...

  3. python分片上传_分片上传_分片上传_上传文件_Python_SDK 示例_对象存储 OSS - 阿里云...

    OSS提供的分片上传(Multipart Upload)功能,将要上传的较大文件(Object)分成多个数据块(Part)来分别上传,上传完成后再调用CompleteMultipartUpload接口 ...

  4. java三国英杰传_三国英杰传重点战役详细攻略(合集)

    汜水关详细攻略(不消耗豆) 本来应该由小戟和自称天才来写这个攻略,可他们一直懒于应付,本人只好把自己的打法写出来供有关爱好者参考,但打法多种多样,不必拘泥于此. 本关刘备为短兵.关羽和张飞为轻骑兵.5 ...

  5. 读取excel日期 c++_实例9:用Python自动生成Excel档每日出货清单

    公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用.要求按日期来汇总,每日只要有出货,就需要一份出货单.出货总表包含数百条出货记录.假设一年有200天都出过货,那按照常规的方法,需要从总表 ...

  6. excel自动保存_萌新必看!python处理excel实例

    电脑上必安装的办公软件三大软件:word.excel.ppt,其中excel是在处理数据效率最高,也是最为繁琐的,因此高效快捷使用excel尤为重要,以下为大家介绍使用python更自动化处理exce ...

  7. excel填充序列_数据太多输不完?Excel自动填充帮你搞定

    大家好,这里是有讲课堂.非常荣幸和你相遇. 最近有朋友和我说,有些功能用多了就没法察觉出它的意义了,就比如Excel的[自动填充] 仔细想想,自动填充在平时的运用其实真的很重要,很实用. 是的,自动填 ...

  8. 分布式 java 应用:基础与实践_单集群数据超1000亿,微服务架构下分布式数据库应用实践...

    如今,大型企业的应用平台正在向微服务架构进行转型.在微服务架构下,应用程序和数据库等底层平台的关系将会被重构. 作为新一代分布式数据库,其架构与功能特性需要保证在与传统数据库全兼容的基础上,拥抱微服务 ...

  9. java复制屏幕文本内容_网页上的文字内容不给复制?电脑老司机教你输入一串代码,轻松复制...

    原标题:网页上的文字内容不给复制?电脑老司机教你输入一串代码,轻松复制 我们有时候需要一些资料就会去网上查资料,有的时候我们需要把这些资料的文字给复制下来.但并不是所有的资料都能直接复制的,不是登陆账 ...

最新文章

  1. Para list设置
  2. 前端一HTML:二十五盒子模型
  3. Codeforces1019C
  4. 【POJ - 2728】Desert King (最有比率生成树,分数规划)
  5. Java程序猿面试体会,还没找到工作的“猿猿们”看过来!
  6. 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加
  7. Vue 组件 data为什么是函数
  8. php广告屏如何同步,户外LED大屏广告如何投放才能更吸引人?
  9. 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
  10. lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...
  11. WireShark抓包分析
  12. 28个超有用的PPT小技巧,快来收藏
  13. [升级凯立德地图] 升级凯立德地图 (车载 导航仪)
  14. 多目标跟踪算法FairMOT
  15. 10-新闻发布系统数据库-新闻管理数据操作
  16. 香港流行乐坛三十年(很好的回忆)
  17. hdu 1166 排兵布阵
  18. android实现 桌面移动悬浮窗口实现
  19. 数据结构学习笔记:算法复杂度的度量之“大O记号”
  20. 展讯走出困境开始爬坡

热门文章

  1. 怎样正确使用和维护微型计算机,下篇:微型计算机应该怎样进行维护与保养
  2. python jieba库下载_Python中jieba库安装步骤及失败原因解析
  3. python画图颜色种类_Python可视化|matplotlib07-python colormap(颜色映射)(三)
  4. java 数组 内存_图解Java数组的内存分配
  5. sql语句lastupdate使用数据库库函数
  6. html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程
  7. linux文件权限umask,linux系统中UMASK权限的用法讲解
  8. 魔兽三国服务器维护,魔兽三国开服七天技巧
  9. 【button】 按钮组件说明
  10. CSS定义字体间距 字体行与行间距