导入Excel存入数据库

直接上代码,注释写的很清楚

需要的jar包下载地址

https://download.csdn.net/download/yanpengfeil/10611873

package com.my.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

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.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class ImportExcel {
	/**
	 * 思路解析:
	 * @param1 request 不解释
	 * @param2 dataList 要存入数据库字段 以英文 ; 分隔
	 * @param3 Excelpath excel路径
	 * 	首先将excel表格上传至服务器
	 * 	将服务器返回的路径、以及要存入数据库的字段传入此方法
	 *  根据数据库规定来写代码
	 * 
	 * */
	public String ImportExcelM(HttpServletRequest request,String dataList,String Excelpath){
		String tableName="";//存入数据库的表名
	    String vre="0";
	    
	    Configuration cfg=new Configuration().configure();
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		Session sess = sessionFactory.openSession();
		//获取项目绝对路径
	    String projectPath = request.getSession().getServletContext().getRealPath("");
	    //转换 /
	    String execelFile=Excelpath;
	    String[] eF= execelFile.split("/");
	    String execelFile1="";
	    for(int r=4;r<eF.length-1;r++){
	        eF[r]=eF[r]+"\\";
	        execelFile1=execelFile1+eF[r];
	    }
	    execelFile1=execelFile1+eF[eF.length-1];
	    
	    String[] dm1=dataList.split(";");
	    int jyzs = dm1.length;
	    try {
	        try {
	            String hql="";
	            Query qu=null;
	            // 构造 Workbook 对象,execelFile 是传入文件路径(获得Excel工作区)
	            Workbook book = null;

	            try {
	                // Excel 2007获取方法
	                book = new XSSFWorkbook(new FileInputStream(projectPath+"//"+execelFile1));
	            } catch (Exception ex) {
	                // Excel 2003获取方法
	                book = new HSSFWorkbook(new FileInputStream(projectPath+"//"+execelFile1));
	            }

	            // 读取表格的第一个sheet页
	            Sheet sheet = book.getSheetAt(0);
	            // 定义 row、cell
	            Row row;
	            String cell;
	            // 总共有多少行,从0开始
	            int totalRows = sheet.getLastRowNum() ;
	            if (totalRows==0) {
	                throw new Exception("文档中没有可导入数据");
	            }
	            // 循环输出表格中的内容,首先循环取出行,再根据行循环取出列
	            for (int i = 1; i <= totalRows; i++) {
	                Transaction tran= sess.beginTransaction();
	                row = sheet.getRow(i);
	                // 处理空行
	                if(row == null){
	                    continue ;
	                }
	                // 总共有多少列,从0开始
	                int totalCells = row.getLastCellNum() ;
	                /**
	                 * 实际应该是对应数据课的实体类
	                 * */
	                UserInfo U = new UserInfo();
	                java.util.Date dateDate = new Date();
	                SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	                String dateString1 = formatter1.format(dateDate);
	                int e = 0;
	                for (int j = 0; j < totalCells; j++) {
	                    switch (dm1[e]) {
	                        case "xingm": //姓名
	                        	Cell cell1 = row.getCell(j);
	                        	String xingm="";
                            	try{
                            		xingm = cell1.toString();
                            		if(xingm.equals("") || xingm == null){
                            			 vre="5=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写人员《姓名》信息";
                                         throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《姓名》信息");
                            		}else{
                            			U.setXingm(xingm.replace(" ", ""));
                            		}
                                }catch(Exception e2){
                                	vre="5=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写人员《姓名》信息";
                                    throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《姓名》信息");
                                }
	                            break;
	                        case "mzzw": //民族
	                        	 Cell cell2 = row.getCell(j);
	                            try{
	                                if(row.getCell(j).toString().equals("")||row.getCell(j).toString()==null){
	                                    vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息";
	                                    throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息");
	                                }else{
	                                	String mzzw = findMz(cell2.toString().replace(" ", ""));
	                                	if(mzzw.equals("")){
	                                		 vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息";
	 	                                    throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息");
	                                	}else{
	                                		U.setMzzw(mzzw);
	                                	}
	                                }
	                            }catch(Exception e2){
	                                vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:导入民族信息失败";
	                                throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:导入民族信息失败");
	                            }
	                            break;
	                        case "sfzh": //sfzh
	                        	String sfzh="";
	                        	try{
	                        		 sfzh=row.getCell(j).toString();
	                        		  if(row.getCell(j).toString().equals("")||row.getCell(j).toString()==null){
	                                      vre="3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写身份证信息";
	                                      throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《身份证》信息");
	                                  }else{
	                                      row.getCell(j).toString().replace(" ", "");
	                                  }
	                        	}catch(Exception e2){
	                        		vre="3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写身份证信息";
	                                throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《身份证》信息");
	                        	}
	                        	  if (sfzh.length()==15){
	                                  U.setSfzh(sfzh);
	                              }else if(sfzh.length()==18){
	                            	 char charAt = sfzh.charAt(17);
	                          		String valueOf = String.valueOf(charAt);
	                          		if(valueOf.matches("^[0-9]*[1-9][0-9]*$")){
	                          			U.setSfzh(sfzh);
	                          		}else if(valueOf.toUpperCase().equals("X")){
	                          			U.setSfzh(sfzh.toUpperCase());
	                          		}else{
	                          			vre = "3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码格式不正确!";
	                                    throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码格式不正确!");

	                          		}
	                              }else{
	                                  vre = "3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码位数不正确!";
	                                  throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码位数不正确!");

	                              }
	                              if(Integer.parseInt(sfzh.substring(16,17)) % 2 != 0){
	                                  U.setXbdm("01");
	                                  U.setXbzw("男");
	                              }
	                              else{
	                                  U.setXbdm("02");
	                                  U.setXbzw("女");
	                              }
	                              Date myDate = new Date();// 得到系统日期然后就可以得到时间了:
	                              SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
	                              String dateString = formatter.format(myDate);
	                              int nianling = Integer.parseInt(dateString.split("-")[0]) - Integer.parseInt(sfzh.substring(6,10)) - 1;
	                              if((Integer.parseInt(dateString.split("-")[1]) - Integer.parseInt(sfzh.substring(10,12)))>=0){
	                                  if((Integer.parseInt(dateString.split("-")[2]) - Integer.parseInt(sfzh.substring(12,14))) >= 0){
	                                      nianling = nianling + 1;
	                                  }
	                              }
	                              U.setCsrq(sfzh.substring(6,10)+"年"+sfzh.substring(10,12)+"月"+sfzh.substring(12,14)+"日");
	                            break;
	                    }
	                    e++;
	                }
	                sess.save(U);
	                if(i%10000==0){   //每一千条刷新并写入数据库
	                    sess.flush();
	                    sess.clear();
	                }
	                tran.commit();
	            }

	            vre="1";
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }

	    } catch (Exception e) {
	        e.printStackTrace();
	    }finally{
	        if(sess != null)
	            sess.close();
	    }
	    DeleteFolder(projectPath+"/zczwxfile1");
        return vre;
    }
    
    /**
     *  根据路径删除指定的目录或文件,无论存在与否
     *@param sPath  要删除的目录或文件
     *@return 删除成功返回 true,否则返回 false。
     */
    public static boolean DeleteFolder(String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        // 判断目录或文件是否存在
        if (!file.exists()) {  // 不存在返回 false
            return flag;
        } else {
            // 判断是否为文件
            if (file.isFile()) {  // 为文件时调用删除文件方法
                return deleteFile(sPath);
            } else {  // 为目录时调用删除目录方法
                return deleteDirectory(sPath);
            }
        }
    }
	    /**
	     * 删除单个文件
	     * @param   sPath    被删除文件的文件名
	     * @return 单个文件删除成功返回true,否则返回false
	     */
	    public static boolean deleteFile(String sPath) {
	        boolean flag = false;
	        File file = new File(sPath);
	        // 路径为文件且不为空则进行删除
	        if (file.isFile() && file.exists()) {
	            file.delete();
	            flag = true;
	        }
	        return flag;
	    }
	    /**
	     * 删除目录(文件夹)以及目录下的文件
	     * @param   sPath 被删除目录的文件路径
	     * @return  目录删除成功返回true,否则返回false
	     */
	    public static boolean deleteDirectory(String sPath) {
	        //如果sPath不以文件分隔符结尾,自动添加文件分隔符
	        if (!sPath.endsWith(File.separator)) {
	            sPath = sPath + File.separator;
	        }
	        File dirFile = new File(sPath);
	        //如果dir对应的文件不存在,或者不是一个目录,则退出
	        if (!dirFile.exists() || !dirFile.isDirectory()) {
	            return false;
	        }
	        boolean flag = true;
	        //删除文件夹下的所有文件(包括子目录)
	        File[] files = dirFile.listFiles();
	        for (int i = 0; i < files.length; i++) {
	            //删除子文件
	            if (files[i].isFile()) {
	                flag = deleteFile(files[i].getAbsolutePath());
	                if (!flag) break;
	            } //删除子目录
	            else {
	                flag = deleteDirectory(files[i].getAbsolutePath());
	                if (!flag) break;
	            }
	        }
	        if (!flag) return false;
	        //删除当前目录
	        if (dirFile.delete()) {
	            return true;
	        } else {
	            return false;
	        }
	    }

	 public static String findMz(String str){
	        String info="";
	        int index=0;
	        String [] arr={"汉族","蒙古族","回族","维吾尔族","苗族","彝族","壮族","布依族","朝鲜族","满族","瑶族","侗族","白族","土家族","哈尼族","哈萨克族","傣族","傈僳族","佤族","畲族","高山族","拉祜族","水族","东乡族","纳西族","景颇族","柯尔克孜族","土族","达斡尔族","仫佬族","羌族","布朗族","撒拉族","毛难族","仡佬族","锡伯族","阿昌族","普米族","塔吉克族","怒族","乌孜别克族","乌孜别克族","俄罗斯族","鄂温克族","德昂族","保安族","裕固族","塔塔尔族","京族","独龙族","鄂伦春族","赫哲族","门巴族","珞巴族","基诺族"};
	        for (int i = 0; i < arr.length; i++) {
	            String s=arr[i];
	            if(str.equals(arr[i])){
	                index=i+1;
	                if(index < 10){
	                    info = index+"";
	                    return "0"+info;
	                }else{
	                    return info = index+"";
	                }
	            }else{
	                info ="";
	            }
	        }
	        return info;
	    }
}

猜你喜欢

转载自blog.csdn.net/yanpengfeil/article/details/81806205