JavaWeb项目ssm实现读取excel数据插入到数据库详解

最近在做项目的时候用到读取excel数据,将excel中的多行数据读取出来插入到数据库中的相应的表中。首先看一下展示图:

首先是页面的两个btn:

JavaWeb项目ssm实现读取excel数据插入到数据库详解_第1张图片

然后看一下excel表中的数据格式:

然后看一下读出来的数据:

JavaWeb项目ssm实现读取excel数据插入到数据库详解_第2张图片

首先将需要的依赖添加在项目的pom.xml文件中:


	org.apache.poi
	poi
	3.8
	
		
		commons-codec
		commons-codec
		
	


	org.apache.poi
	poi-ooxml
	3.8


     commons-fileupload
     commons-fileupload
     1.2.1



    commons-io
    commons-io
2.4

然后再spring-mvc.xml中添加一下代码:


   
   
   

然后是读取excel文件中的数据:

package com.qcbylearn.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import com.qcbylearn.entitys.Student;
public class ReadExcel {
	//总行数
    private int totalRows = 0;  
    //总条数
    private int totalCells = 0; 
    //错误信息接收器
    private String errorMsg;
    //构造方法
    public ReadExcel(){}
    //获取总行数
    public int getTotalRows()  { return totalRows;} 
    //获取总列数
    public int getTotalCells() {  return totalCells;} 
    //获取错误信息
    public String getErrorInfo() { return errorMsg; }    
  /**
   * 读EXCEL文件,获取信息集合
   * @param fielName
   * @return
   */
	public List getExcelInfo(MultipartFile mFile) {
		String fileName = mFile.getOriginalFilename();//获取文件名
		System.out.println("文件名"+fileName);
		List stuList = null;
		try {
			if (!validateExcel(fileName)) {// 验证文件名是否合格
				return null;
			}
			boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本
			if (isExcel2007(fileName)) {
				isExcel2003 = false;
			}
		  stuList = createExcel(mFile.getInputStream(), isExcel2003);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return stuList;
	}
  /**
   * 根据excel里面的内容读取客户信息
   * @param is 输入流
   * @param isExcel2003 excel是2003还是2007版本
   * @return
   * @throws IOException
   */
	public List createExcel(InputStream is, boolean isExcel2003) {
		List stuList = null;
		try{
			Workbook wb = null;
			if (isExcel2003) {// 当excel是2003时,创建excel2003
				wb = new HSSFWorkbook(is);
			} else {// 当excel是2007时,创建excel2007
				wb = new XSSFWorkbook(is);
			}
			 stuList = readExcelValue(wb);// 读取Excel里面客户的信息
		} catch (IOException e) {
			e.printStackTrace();
		}
		return stuList;
	}  
  /**
   * 读取Excel里面客户的信息
   * @param wb
   * @return
   */
	private List readExcelValue(Workbook wb) {
		// 得到第一个shell
		Sheet sheet = wb.getSheetAt(0);
		System.out.println("gaolei dayin============" +sheet);
		// 得到Excel的行数
		this.totalRows = sheet.getPhysicalNumberOfRows();
		System.out.println("行数======="+this.totalRows);
		// 得到Excel的列数(前提是有行数)
		if (totalRows > 1 && sheet.getRow(0) != null) {
			this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
			System.out.println("总列数=========="+this.totalCells);
		}
		List stuList = new ArrayList();
		// 循环Excel行数
		for (int r = 1; r < totalRows; r++) {
			Row row = sheet.getRow(r);
			if (row == null){
				continue;
			}
			Student student = new Student();
			// 循环Excel的列
			for (int c = 0; c < this.totalCells; c++) {
				Cell cell = row.getCell(c);
				if (null != cell) {
					
					if (c == 0) {
						//如果是纯数字,比如你写的是25,cell.getNumericCellValue()获得是25.0,通过截取字符串去掉.0获得25
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							try {
								//String studentNumber = String.valueOf(cell.getNumericCellValue());
								//String x =studentNumber.substring(0, studentNumber.length()-2>0?studentNumber.length()-2:1);//年龄
								student.setStudentnumber(Integer.valueOf((int) cell.getNumericCellValue()));
							} catch (NumberFormatException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
								System.out.println("if false");
							}
						}else{
							try {
								student.setStudentnumber(Integer.valueOf(cell.getStringCellValue()));
							} catch (Exception e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
								System.out.println("类型不匹配");
							}
						}
					} else if (c == 1) {
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String appUserId = String.valueOf(cell.getNumericCellValue());
							String x = appUserId.substring(0, appUserId.length()-2>0?appUserId.length()-2:1);//性别
							student.setAppuserid(Long.valueOf(x));
						}
					} 
					else if (c == 2){
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String firstName = String.valueOf(cell.getNumericCellValue());
							student.setFirstname(firstName);
						}else{
							student.setFirstname(cell.getStringCellValue());
						}
					}
					else if (c == 3){  
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String middleName = String.valueOf(cell.getNumericCellValue());
							student.setMiddlename(middleName);
						}else{
							student.setMiddlename(cell.getStringCellValue());
						}
					}
					else if (c == 4){   
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String lastName = String.valueOf(cell.getNumericCellValue());
							student.setLastname(lastName);
						}else{
							student.setLastname(cell.getStringCellValue());
						}
					}
					else if (c == 5){
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String email = String.valueOf(cell.getNumericCellValue());
							student.setEmail(email);
						}else{
							student.setEmail(cell.getStringCellValue());
						}
					}
					else if (c == 6){  
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							Integer classNumber = Integer.valueOf((int) cell.getNumericCellValue());
							//student.setClassnumber(classNumber.substring(0, classNumber.length()-2>0?classNumber.length()-2:1));
							System.out.println("if classnum");
							student.setClassnumber(String.valueOf(classNumber));
						}else{
							student.setClassnumber(cell.getStringCellValue());
							System.out.println("else classnum");
						}
					}
					else if (c == 7){
						if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
							String gender = String.valueOf(cell.getNumericCellValue());
							student.setGender(gender);
						}else{
							student.setGender(cell.getStringCellValue());
						}
					}
					else if (c == 8){
						
							if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
								String status = String.valueOf(cell.getNumericCellValue());
								student.setStatus(status);
							}else{
								student.setStatus(cell.getStringCellValue());
							}						
					}
				}
			}
			// 添加到list
			stuList.add(student);
		}
		return stuList;
	}
	
	/**
	 * 验证EXCEL文件
	 * 
	 * @param filePath
	 * @return
	 */
	public boolean validateExcel(String filePath) {
		if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {
			errorMsg = "文件名不是excel格式";
			return false;
		}
		return true;
	}
	
	// @描述:是否是2003的excel,返回true是2003 
    public static boolean isExcel2003(String filePath)  {  
         return filePath.matches("^.+\\.(?i)(xls)$");  
     }  
    //@描述:是否是2007的excel,返回true是2007 
    public static boolean isExcel2007(String filePath)  {  
         return filePath.matches("^.+\\.(?i)(xlsx)$");  
     }  
}

service层代码如下:

package com.qcbylearn.serviceimpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.qcbylearn.dao.StudentMapper;
import com.qcbylearn.entitys.Student;
import com.qcbylearn.services.HelpThreeDoExcelService;
import com.qcbylearn.utils.ReadExcel;

@Service("helpThreeDoExcelService")
public class HelpThreeDoExcelServiceImpl implements HelpThreeDoExcelService {
	@Autowired
	private StudentMapper studentMapper; 
	@Override
	public String readExcelFile(MultipartFile file) {
		//创建处理EXCEL的类
        ReadExcel readExcel=new ReadExcel();
        //解析excel,获取上传的事件单
        List stuList = null;
        int insertResult = 0;
		String insertMsg = "";
		try {
			stuList = readExcel.getExcelInfo(file);
			//至此已经将excel中的数据转换到list里面了,接下来就可以操作list,可以进行保存到数据库,或者其他操作,
			//和你具体业务有关,这里不做具体的示范
			//数据库插入		
			for(Student s :stuList) {
				insertResult += studentMapper.insertSelective(s);
				System.out.println(s.toString());
			}
			if(insertResult ==0) {
				insertMsg = "All insert false";
			}else if(insertResult == stuList.size()){
				insertMsg = "All insert success";
			}else {
				insertMsg = "Part insert success";
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("接受excel表格中的数据失败!!!");
		}
		for(Student s : stuList) {
        	System.out.println("打印excel中的数据"+s.toString());
        }
		return insertMsg;
	}
}

controller层:

	 
	//添加学生的方法  excel 相关的操作   能够将数据插入到数据库 
	@Autowired
	private HelpThreeDoExcelService helpThreeDoExcelService;
	//@ResponseBody
	@RequestMapping(value="DoExcel",method= {RequestMethod.POST})
	public ModelAndView DoExcel(@RequestParam(value="file_excel") MultipartFile file,HttpServletRequest request) {
		ModelAndView mv = new ModelAndView();
		String readResult =null;
		try {
			readResult = helpThreeDoExcelService.readExcelFile(file);
			System.out.println("canshu :"+readResult);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("upload falure");
		}
		System.out.println("插入结果="+readResult);
		mv.addObject("readResult", readResult);
		mv.setViewName("Help_Three/Help_Three_addStu");
        return mv;
	}

jsp代码:

Jquery代码:

    //点击上传
 	$('#file_copy').click(function(){
 		$('#file_excel').click();
 	})
 	 $("#file_excel").bind("change",function(){
			 $("#filename").attr("value",$("#file_excel").val());
		 });	
 	//点击提交
 	$('#download').click(function(){
 		
 		$("#form_excel").submit();
 		
 	})

 

你可能感兴趣的:(Java,ssm,项目)