将Excel数据批量导入到数据库

我们今天就给大家介绍一个用途非常广泛的功能:批量导入,在很多系统中,这也是必须实现的功能。而且当Excel表结构越复杂时,实现的难度就越高。

不管项目如何复杂,原理却基本相同,一般是前台页面选择Excel文件,后台获取后进行数据转化,然后循环执行Sql语句即可,了解这些原理后,一切也就变得简单。
项目进行简化,只有批量导入功能,采用Struts2框架,将Excel数据导入到Mysql数据库中。
项目的结构图如下:

在这里插入图片描述
MYSQL数据库USER数据表结构:
在这里插入图片描述

EXCEL表中的数据:
在这里插入图片描述

如果Excel中必填项数据为空,提示导入失败,报告错误信息及位置,如图:
在这里插入图片描述
如果数据正确,提示导入数据库成功:
在这里插入图片描述
具体实现过程的步骤:
JSP页面,name的名称是重点

上传

前台点击上传后跳转到action处理,action中首先定义:

//这里特别注意获取fileinput要和页面的导入时name属性一致。
private File fileinput;
//文件名用得到就获取,一般用不到。
private String fileinputFileName;
//下面是get和set方法,省略

然后在方法体中直接调用:

//参数为获取到的文件
ExcelUtil(fileinput);
ExcelUtil是处理Excel工具类,直接使用,代码如下:

/*解析excel 工具类/
@SuppressWarnings(“rawtypes”)
public class ExcelUtil {

public FileInputStream fis ;
public HSSFWorkbook workBook;
public HSSFSheet sheet;
public XMLUtil parseXmlUtil;
public StringBuffer errorString;

/**当前实体类的code**/
public String curEntityCode;

/**表头map对象:key:entityCode, value:headMap(index,headTitle)**/
public Map curEntityHeadMap ;

/**字段的必填:key:entityCode+headTitle, value:true(必填),false(不必填)**/
public Map curEntityColRequired;

/**存放每一行的数据**/
public  List listDatas ;


public ExcelUtil(File excelFile){
	try {
		if(excelFile == null){
			throw new FileNotFoundException();
		}
	   fis = new FileInputStream(excelFile);		   
	   workBook = new HSSFWorkbook(fis);
	   parseXmlUtil = new XMLUtil();
	   errorString = new StringBuffer();
	   readExcelData();
	   	   				
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}catch (IOException e) {
		e.printStackTrace();
	}	
}


/**开始从excel读取数据**/	
public void readExcelData(){
	int sheetSize = workBook.getNumberOfSheets();
	for(int i=0;i<sheetSize;i++){
		sheet = workBook.getSheetAt(i);
		String entityName = workBook.getSheetName(i);
		readSheetData(sheet,entityName);
	}
	
}

/**读每个sheet页的数据**/
public void readSheetData(HSSFSheet sheet,String entityName){
	
	   int rowNumbers = sheet.getPhysicalNumberOfRows();
	   Map ent = (Map) parseXmlUtil.getEntityMap().get(entityName);
	   this.setCurEntityCode((String) ent.get("code"));
	   if(rowNumbers == 0){
		   System.out.println("excel中数据为空!");
		   errorString.append(Constans.ERROR_EXCEL_NULL);
	   }		  
	   List colList = (List) parseXmlUtil.getColumnListMap().get(entityName);
	   int xmlRowNum = col
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值