java struts2怎么从数据库获取_文件信息批量导入数据库(Struts2实现文件上传,POI实现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,不然不能识别

packagecom.adtec.datacenter.action.manager;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.ArrayList;

importjava.util.List;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.commons.io.FileUtils;

importorg.apache.poi.hssf.usermodel.HSSFWorkbook;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.Row;

importorg.apache.poi.ss.usermodel.Sheet;

importorg.apache.poi.ss.usermodel.Workbook;

importorg.apache.struts2.ServletActionContext;

importcom.adtec.datacenter.dao.manager.FileLoadDao;

importcom.adtec.datacenter.dao.manager.RoleDao;

importcom.adtec.datacenter.entity.manager.PtRoleInfo;

importcom.adtec.datacenter.vo.manager.RoleInfo;

importcom.opensymphony.xwork2.ActionSupport;

publicclassRoleFileUploadActionextendsActionSupport{

privateFile uploadFile;

privateString uploadFileFileName;

privateFileLoadDao fileLoadDao;

privateRoleDao roleDao;

publicFile getUploadFile() {

returnuploadFile;

}

publicvoidsetUploadFile(File uploadFile) {

this.uploadFile = uploadFile;

}

publicString getUploadFileFileName() {

returnuploadFileFileName;

}

publicvoidsetUploadFileFileName(String uploadFileFileName) {

this.uploadFileFileName = uploadFileFileName;

}

publicFileLoadDao getFileLoadDao() {

returnfileLoadDao;

}

publicvoidsetFileLoadDao(FileLoadDao fileLoadDao) {

this.fileLoadDao = fileLoadDao;

}

publicRoleDao getRoleDao() {

returnroleDao;

}

publicvoidsetRoleDao(RoleDao roleDao) {

this.roleDao = roleDao;

}

@Override

publicvoidvalidate() {

super.validate();

}

publicString loadRoleFile(){

String directory = “/upload/role”;

String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);

//生成上传的文件对象

File target = newFile(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);

returnSUCCESS;

}

/**

* 把Excele表读出的数据,组装成一个List,统一导入数据库

* @param uploadFileFileName

*/

publicvoidloadRoleInfo(String uploadFileFileName){

String directory = “/upload/role”;

String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);

File target = newFile(targetDirectory,uploadFileFileName);

List roleList = newArrayList();

try{

FileInputStream fi = newFileInputStream(target);

Workbook wb = newHSSFWorkbook(fi);

Sheet sheet = wb.getSheetAt(0);

introwNum = sheet.getLastRowNum()+1;

for(inti=1;i

PtRoleInfo ptRoleInfo = newPtRoleInfo();

Row row = sheet.getRow(i);

intcellNum = row.getLastCellNum();

for(intj=0;j

Cell cell = row.getCell(j);

String cellValue = null;

switch(cell.getCellType()){//判断excel单元格内容的格式,并对其进行转换,以便插入数据库

case0: cellValue = String.valueOf((int)cell.getNumericCellValue());break;

case1: cellValue = cell.getStringCellValue();break;

case2: cellValue = String.valueOf(cell.getDateCellValue());break;

case3: cellValue =“”;break;

case4: cellValue = String.valueOf(cell.getBooleanCellValue());break;

case5: cellValue = String.valueOf(cell.getErrorCellValue());break;

}

switch(j){//通过列数来判断对应插如的字段

case0: ptRoleInfo.setRoleId(cellValue);break;

case1: ptRoleInfo.setRoleName(cellValue);break;

case2: ptRoleInfo.setDeil(cellValue);break;

}

}

roleList.add(ptRoleInfo);

}

fileLoadDao.roleInfotoDB(roleList);

}catch(IOException e){

e.printStackTrace();

}

}

}

roleDao接口实现

这里接口类就不贴出来了,直接贴实现类,把持久化实体List循环写入数据库

packagecom.adtec.datacenter.dao.manager;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.Iterator;

importjava.util.List;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.commons.io.FileUtils;

importorg.apache.poi.hssf.usermodel.HSSFWorkbook;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.Row;

importorg.apache.poi.ss.usermodel.Sheet;

importorg.apache.poi.ss.usermodel.Workbook;

importorg.apache.struts2.ServletActionContext;

importorg.hibernate.HibernateException;

importorg.hibernate.Session;

importorg.hibernate.Transaction;

importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;

importcom.adtec.datacenter.entity.manager.PtRoleInfo;

importcom.adtec.datacenter.vo.manager.RoleInfo;

/**

* 文件工具类

* @author Tony

*

*/

publicclassFileLoadDaoImplextendsHibernateDaoSupportimplementsFileLoadDao {

/**

* 把从excel表读出的数据写入到数据库

*/

publicvoidroleInfotoDB(List roleList){

Session session = this.getHibernateTemplate().getSessionFactory().openSession();

Transaction tx = null;

try{

tx = session.beginTransaction();

if(roleList.size() >0){

introleNum = roleList.size();

for(inti=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;

}

}

这里循环写入数据库,可以使用Spring自动注入的事务管理,更方便简洁,可惜我这里的框架不知道为什么,只要注入事务管理就报错,TT正在查找问题所在!哭……..

这样Excel文件的读取以及数据库的写入就实现了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值