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文件读取并写入数据库技术...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑圣除了带巨剑和光剑好,还可以带什么武器
- 下一篇: 楚乔传燕洵母亲白笙和皇上是什么关系 白笙