java 读取excel中的内容,并将其写入数据库

java 读取excel中的内容,并将其写入数据库,第1张

java 读取excel中的内容,并将其写入数据库

首先是效果图
excel表格内容

页面

数据库

jsp代码

        

控制层代码

 @RequestMapping("/importAdmissionExcel")
    public String importAdmissionExcel(ModelMap map, HttpServletRequest request, MultipartHttpServletRequest requestf) throws SQLException {
        MultipartFile zipFile = requestf.getFile("zipFile");
        String rets = "";
        if(zipFile==null){
            rets+=",请上传准考证库.xls文件";
        }else{
            if(!zipFile.getOriginalFilename().toLowerCase().endsWith(".xls")){
                rets+=",上传准考证文件只能是.xls格式文件";
            }
        }
        if(!rets.equals("")){
            map.put("msg", rets.substring(1));
            return "library/otheradmission/importExcel";
        }
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            String level = userDetails.getLevelid();
            
            Long startTime = System.currentTimeMillis();
            String examId = (String) request.getSession().getAttribute("currentExamId");
            String depcode = userDetails.getDepcode().trim();
            String zipFileName = "" + zipFile.getName() + ".xls";
            String targetDirectory = StaticConstants.getAdmissionPicPath(examId, depcode);
            if (!new File(targetDirectory).exists()) {
                new File(targetDirectory).mkdirs();
            }
            File ziptarget = new File(targetDirectory, zipFileName);
            FileUtils.copyInputStreamToFile(zipFile.getInputStream(), ziptarget);


            String tableNameDataAdmission2 = "EXAM_" + examId + "_ADMISSION_DATA";
            //System.out.println(tableNameDataAdmission2);
            if (this.commonJdbcdao.isExistTable(tableNameDataAdmission2)) { //判断准考证数据是否已经导入
                //Boolean issuper = userDetails.getSuperuser();
                String uuname = userDetails.getUsername();
                String depcodeg = userDetails.getDepcode();
            }
            //创建新的考生准考证表
            String tableNameDataAdmission = "EXAM_" + examId + "_ADMISSION_DATA";
            if (!this.admissionService.isExistTable(tableNameDataAdmission)) {
                StringBuilder sb = new StringBuilder("CREATE TABLE " + tableNameDataAdmission + " (");
                sb.append("  `ZJBH` varchar(64) NOT NULL DEFAULT '', ");
                sb.append("  `KMDM` varchar(32) NOT NULL DEFAULT '',");
                sb.append("  `ZKZH` varchar(96) DEFAULT NULL,");
                sb.append("  `SS` varchar(32) DEFAULT NULL,");
                sb.append("  `KQ` varchar(32) DEFAULT NULL, ");
                sb.append("  `KDH` varchar(32) DEFAULT NULL,");
                sb.append("  `KCH` varchar(16) DEFAULT NULL,");
                sb.append("  `ZWH` varchar(16) DEFAULT NULL,");
                sb.append("  `SIGNUPID` varchar(144) DEFAULT NULL,");
                sb.append("  `ZKZDY` decimal(10,0) DEFAULT '0',");
                sb.append("  `ZKZDY_DATE` varchar(20) DEFAULT NULL,");
                sb.append("  PRIMARY KEY (`ZJBH`,`KMDM`),");
                sb.append("  KEY `IN_EXAM_" + examId + "_ADMISSION_DATA` (`ZJBH`)");
                sb.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8");
                //创建表
                if (this.admissionService.isExistTable(tableNameDataAdmission.toUpperCase()) == false) {
                    this.commonJdbcdao.getJdbcTemplate().update(sb.toString());
                }
            }

            //创建新的考生准考证表
            String _dep_admis = "EXAM_" + examId + "_dep_admis";
            if (!this.admissionService.isExistTable(_dep_admis)) {
                StringBuilder sb = new StringBuilder("CREATE TABLE " + _dep_admis + " (");
                sb.append("  `DEPCODE` varchar(20) NOT NULL COMMENT 'add field length for encrpty',");
                sb.append("  `LEVELID` varchar(20) NOT NULL DEFAULT '',");
                sb.append("  `TITLE` varchar(120) DEFAULT NULL,");
                sb.append("  `PARENTCODE` varchar(20) DEFAULT NULL,");
                sb.append("  `INCHARGE` varchar(36) DEFAULT NULL,");
                sb.append("  `PHONE1` varchar(20) DEFAULT NULL,");
                sb.append("  `PHONE2` varchar(20) DEFAULT NULL,");
                sb.append("  `PHONE3` varchar(20) DEFAULT NULL,");
                sb.append("  `ADDRESS` varchar(200) DEFAULT NULL,");
                sb.append("  `ZIP` varchar(32) DEFAULT NULL,");
                sb.append("  `EMAIL` varchar(64) DEFAULT NULL,");
                sb.append("  `PXM` varchar(2) DEFAULT NULL,");
                sb.append("  `KCBZ` varchar(5) DEFAULT NULL,");
                sb.append("  `KSFZR` varchar(10) DEFAULT NULL,");
                sb.append("  `LXFS` varchar(20) DEFAULT NULL,");
                sb.append("  `XH` varchar(2) DEFAULT NULL,");
                sb.append("  `SFKDCS` varchar(2) DEFAULT NULL,");
                sb.append("  `CPKD` varchar(2) DEFAULT NULL,");
                sb.append("  PRIMARY KEY (`DEPCODE`,`LEVELID`)");
                sb.append(" ) ENGINE=InnoDB DEFAULT CHARSET=utf8");
                //创建表
                if (this.admissionService.isExistTable(_dep_admis.toUpperCase()) == false) {
                    this.commonJdbcdao.getJdbcTemplate().update(sb.toString());
                }
            }
            String sql_count = "SELECT count(*) FROM exam_" + examId + "_department WHERe parentcode = '144' ";
            Integer drcount = this.commonJdbcdao.getJdbcTemplate().queryForInt(sql_count);
            if (drcount == 0){
                String sql = "INSERT INTO exam_"+examId+"_department (DEPCODE,LEVELID,TITLE,PARENTCODE) " +
                        "SELECt DEPCODE,LEVELID,TITLE,PARENTCODE FROM public_department WHERe parentcode = '144' ";
                this.commonJdbcdao.getJdbcTemplate().update(sql);
            }
            String zkz_count = "SELECT COUNT(*) FROM tp_global_exam_zkz WHERe examid = '" + examId + "' ";
            Integer zkzcount = this.commonJdbcdao.getJdbcTemplate().queryForInt(zkz_count);
            if (zkzcount == 0){
                String sql = "INSERT INTO tp_global_exam_zkz (examid,CODE,begindate,fulltitle) " +
                        "VALUES ('"+examId+"','"+examId+"','"+DateUtil.getCurrentDate().replace("-","").substring(0,6)+"','"+examId+"') ";
                this.commonJdbcdao.getJdbcTemplate().update(sql);
            }
            
//            this.commonJdbcdao.getJdbcTemplate().update("drop table Exam_" + examId + "_ADM_CHANGE");

            if (!this.admissionService.isExistTable("Exam_" + examId + "_ADM_CHANGE")) {
                threeCommonService.createlinkTable("Exam_" + examId + "_ADM_CHANGE", "Exam_" + examId + "_ADM_CHANGE_PHOTO", "Exam_" + examId + "_ADM_CHANGE_SUBS", examId);
            }
            this.commonJdbcdao.getJdbcTemplate().update("TRUNCATE table Exam_" + examId + "_ADM_CHANGE");
            Map zkzStatuesMap = this.queryZkzStatus(examId, userDetails.getDepcode());
            if(zkzStatuesMap != null &&  !zkzStatuesMap.isEmpty() ){
                String zkzStatus = (String)zkzStatuesMap.get("ZKZSTATUS");
                if(zkzStatus != null && zkzStatus.equals("1")){
                    map.put("msg", "准考证信息正在导入还未完成,请稍后查看结果!");
                    return "library/otheradmission/importExcel";
                }
            }
            //System.out.println("开始上传:" + DateUtil.getCurrentDateTime());
            String yszipFile = zipFile.getOriginalFilename();
            String[] yzxx = yszipFile.split("_");

            long templateId = this.admissionService.queryTemplateId(Long.valueOf(examId));
            List templateList = this.commonService.findExamByExamId(templateId);  //根据数据包文件名进行校验



//            Statement stmt = null;
            DESPlus des = new DESPlus(0);
            des.setNotEncryptSwitch(false);
            ReadDBF read = new ReadDBF();
            ReadWriteFile readexcel = new ReadWriteFile();//excel读取方法

            String changeColName = " ZJHM, KSXM, BMDS,ZJBH, ZJLB, SS, SIGNUPID";
            String dbfColName = changeColName;
            int readcount = read.getReadcount();
            String insertChangeStr = "";
            insertChangeStr = "INSERT INTO " + " Exam_" + examId + "_ADM_CHANGE " + " (ZJHM, KSXM, BMDS,ZJBH, ZJLB, SS, SIGNUPID) VALUES(";
            for (int i = 0; i < changeColName.split(",").length; i++) {
                insertChangeStr += "?,";
            }
            insertChangeStr = insertChangeStr.substring(0, insertChangeStr.length() - 1);
            insertChangeStr += " )";
            conn = this.commonJdbcdao.getJdbcTemplate().getDataSource().getConnection();
            conn.setAutoCommit(false);
            pstmt = conn.prepareStatement(insertChangeStr);
            Workbook workbook =readexcel.getWorkbook(targetDirectory+"/"+zipFileName);//读取excel
            int zhs = 0;
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
                Sheet sheet = workbook.getSheetAt(numSheet);
                if (sheet == null) {
                    continue;
                }
                int firstRowIndex = sheet.getFirstRowNum();
                int lastRowIndex = sheet.getLastRowNum();

                // 读取首行 即,表头
                String rw = "";
                Row firstRow = sheet.getRow(firstRowIndex);
                if (firstRow == null) {
                    continue;
                }
                Cell cell = firstRow.getCell(0);
                rw = readexcel.getCellValue(cell, true);
                Long batchCount = 1L;
                int ksxmsz=99;
                int zjhmsz=99;
                int bmdssz=99;
                for(int bt=0;bt<3;bt++){
                    if("KSXM".equals(readexcel.getCellValue(firstRow.getCell(bt), true))){
                        ksxmsz=bt;
                    }
                    if("ZJHM".equals(readexcel.getCellValue(firstRow.getCell(bt), true))){
                        zjhmsz=bt;
                    }
                    if("BMDS".equals(readexcel.getCellValue(firstRow.getCell(bt), true))){
                        bmdssz=bt;
                    }

                }
                System.out.println("KSXM="+ksxmsz+"ZJHM="+zjhmsz+"BMDS="+bmdssz);
                if (ksxmsz==99||zjhmsz==99||bmdssz==99){
                    map.put("msg", "导入准考证信息异常!");
                }
                for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) {
                    batchCount++;
                    Row currentRow = sheet.getRow(rowIndex);// 当前行
//                    String ksxm = readexcel.getCellValue(currentRow.getCell(3), true);
//                    String mzjhm = readexcel.getCellValue(currentRow.getCell(2), true);
//                    String zjhm = des.encrypt_r(mzjhm.toUpperCase());
                    zhs += 1;
                    System.out.println("Excel数据文件读取完成:" + DateUtil.getCurrentDateTime() + ",used:" + (System.currentTimeMillis() - startTime) / 1000 + "s");

//                stmt = conn.createStatement();
                    Long signupid = 0L;
                    System.out.println("开始将关联表数据同步到数据库:" + DateUtil.getCurrentDateTime());
                    startTime = System.currentTimeMillis();
                    System.out.println("开始插入临时表:" + DateUtil.getCurrentDateTime());
                    if (batchCount % 3000 == 0) {
                        pstmt.executeBatch();
//                        stmt.executeBatch();
                        conn.commit();
                        pstmt.clearBatch();
                        System.out.println("关联表提交数据量:" + batchCount + " " + DateUtil.getCurrentDateTime());
                    }
                    Map map1 = new HashMap<>();
                    map1.put("广州", "14401");
                    map1.put("深圳", "14402");
                    map1.put("珠海", "14403");
                    map1.put("汕头", "14404");
                    map1.put("韶关", "14405");
                    map1.put("河源", "14406");
                    map1.put("梅州", "14407");
                    map1.put("惠州", "14408");
                    map1.put("汕尾", "14409");
                    map1.put("东莞", "14410");
                    map1.put("中山", "14411");
                    map1.put("江门", "14412");
                    map1.put("佛山", "14413");
                    map1.put("阳江", "14414");
                    map1.put("湛江", "14415");
                    map1.put("茂名", "14416");
                    map1.put("肇庆", "14417");
                    map1.put("清远", "14418");
                    map1.put("潮州", "14419");
                    map1.put("揭阳", "14420");
                    map1.put("云浮", "14421");
                    map1.put("省直", "14499");

                    pstmt.setString(1, currentRow.getCell(zjhmsz) != null ? des.encrypt(readexcel.getCellValue(currentRow.getCell(zjhmsz), true).trim()) : "");
                    pstmt.setString(2, currentRow.getCell(ksxmsz) != null ? des.encrypt(readexcel.getCellValue(currentRow.getCell(ksxmsz), true).trim()) : "");
                    String bmds1=readexcel.getCellValue(currentRow.getCell(bmdssz), true);
                    if (readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("广州")){
                        pstmt.setString(3, map1.get("广州"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("深圳")){
                        pstmt.setString(3, map1.get("深圳"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("珠海")){
                        pstmt.setString(3, map1.get("珠海"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("珠海")){
                        pstmt.setString(3, map1.get("珠海"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("汕头")){
                        pstmt.setString(3, map1.get("汕头"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("韶关")){
                        pstmt.setString(3, map1.get("韶关"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("河源")){
                        pstmt.setString(3, map1.get("河源"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("梅州")){
                        pstmt.setString(3, map1.get("梅州"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("惠州")){
                        pstmt.setString(3, map1.get("惠州"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("汕尾")){
                        pstmt.setString(3, map1.get("汕尾"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("东莞")){
                        pstmt.setString(3, map1.get("东莞"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("中山")){
                        pstmt.setString(3, map1.get("中山"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("江门")){
                        pstmt.setString(3, map1.get("江门"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("佛山")){
                        pstmt.setString(3, map1.get("佛山"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("阳江")){
                        pstmt.setString(3, map1.get("阳江"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("湛江")){
                        pstmt.setString(3, map1.get("湛江"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("茂名")){
                        pstmt.setString(3, map1.get("茂名"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("肇庆")){
                        pstmt.setString(3, map1.get("肇庆"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("清远")){
                        pstmt.setString(3, map1.get("清远"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("潮州")){
                        pstmt.setString(3, map1.get("潮州"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("揭阳")){
                        pstmt.setString(3, map1.get("揭阳"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("云浮")){
                        pstmt.setString(3, map1.get("云浮"));
                    }else if(readexcel.getCellValue(currentRow.getCell(bmdssz), true).contains("省直")){
                        pstmt.setString(3, map1.get("省直"));
                    }
                    pstmt.setString(4, String.valueOf(rowIndex));
                    pstmt.setString(5,"1");
                    pstmt.setString(6,"144");
                    pstmt.setString(7, String.valueOf(rowIndex));
//                    int m = 1;
//                    for (int o = 0; o < 7; o++) {
//                        if (o == 0 || o == 1) {
//                            pstmt.setString(m++, currentRow.getCell(o) != null ? des.encrypt(readexcel.getCellValue(currentRow.getCell(o), true).trim()) : "");
//                            System.out.println(readexcel.getCellValue(currentRow.getCell(o), true));
//                        }else if(o == 5 ){
//                            pstmt.setString(m++,"144");
//                        }else if(o == 4 ){
//                            pstmt.setString(m++,"1");
//                        }else if(o == 3 || o == 6){
//                            pstmt.setString(m++, String.valueOf(rowIndex));
//                        } else if(o == 2){
//                          String bmds1=readexcel.getCellValue(currentRow.getCell(o), true);
//                          System.out.println("bmds="+bmds1);
//                          pstmt.setString(m++,map1.get(bmds1));
//                        }
//                    }
                   pstmt.addBatch();
                }
                pstmt.executeBatch();
                conn.commit();
                pstmt.clearBatch();
                conn.close();
            }

            String resultStr = "   考场excel数据文件共" + zhs + "条记录,"
                    + "插入" + zhs + "条";
            map.put("msg", resultStr);
            System.out.println("end----"+resultStr);
        } catch (Exception e) {
            pstmt.clearBatch();
            pstmt.close();
            conn.rollback();
            conn.close();
            map.put("msg", "导入准考证信息异常!");
//            this.updateZkzStatus(examid, userDetails.getDepcode(), "3");//异常状态
             e.printStackTrace();
            logService.addLog(((Security) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername(), 1, "导入准考证失败", IpAddr.getIpAddr(ServletActionContext.getRequest()), examid);
            return "library/otheradmission/importExcel";
        }
        return "library/otheradmission/importExcel";
    }

以上代码是读取excel内容,创建数据库表,并将内容按照要求进行转换,并插入

下面是读取excel文件 *** 作

public class ReadWriteFile {

    //指定文件路径和名称
    private String filePath;
    private static final String EXTENSION_XLS = "xls";
    private static final String EXTENSION_XLSX = "xlsx";


    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public void creatTxtFile() throws IOException {
        File filename = new File(this.getFilePath());
        if (!filename.exists()) {
            filename.createNewFile();
        }
    }

    public String readTxtFile() {
        String readStr = "";
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(this.getFilePath()), "UTF-8"));
            String s = "";
            while ((s = in.readLine()) != null) {
                readStr += s + "n";
            }
            in.close();
        } catch (Exception ex) {
            Logger.getLogger(ReadWriteFile.class.getName()).log(Level.SEVERE, null, ex);
        }
        return readStr;
    }

    public void writeTxtFile(String newStr) throws IOException {

        this.creatTxtFile();
        try {
            BufferedWriter osw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(this.getFilePath(), false), "UTF-8"));
            osw.write(newStr);
            osw.flush();
            osw.close();
        } catch (Exception ex) {
            //ex.printStackTrace();
        }
    }
    
     
    public Workbook getWorkbook(String filePath) throws IOException {
        Workbook workbook = null;
        InputStream is = new FileInputStream(filePath);
        if (filePath.endsWith(EXTENSION_XLS)) {
            workbook = new HSSFWorkbook(is);
        } else if (filePath.endsWith(EXTENSION_XLSX)) {
            workbook = new XSSFWorkbook(is);
        }
        return workbook;
    }

    
    public void preReadCheck(String filePath) throws FileNotFoundException, FileFormatException {
        // 常规检查
        File file = new File(filePath);
        if (!file.exists()) {
            throw new FileNotFoundException("传入的文件不存在:" + filePath);
        }

        if (!(filePath.endsWith(EXTENSION_XLS) || filePath.endsWith(EXTENSION_XLSX))) {
            throw new FileFormatException("传入的文件不是excel");
        }
    }

    
    public void readExcel(String filePath) throws FileNotFoundException, FileFormatException {
        // 检查
        this.preReadCheck(filePath);
        // 获取workbook对象
        Workbook workbook = null;

        try {
            workbook = this.getWorkbook(filePath);
            // 读文件 一个sheet一个sheet地读取
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
                Sheet sheet = workbook.getSheetAt(numSheet);
                if (sheet == null) {
                    continue;
                }
                System.out.println("=======================" + sheet.getSheetName() + "=========================");

                int firstRowIndex = sheet.getFirstRowNum();
                int lastRowIndex = sheet.getLastRowNum();

                // 读取首行 即,表头
                Row firstRow = sheet.getRow(firstRowIndex);
                for (int i = firstRow.getFirstCellNum(); i <= firstRow.getLastCellNum(); i++) {
                    Cell cell = firstRow.getCell(i);
                    String cellValue = this.getCellValue(cell, true);
                    System.out.print(" " + cellValue + "t");
                }
                System.out.println("");

                // 读取数据行
                for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) {
                    Row currentRow = sheet.getRow(rowIndex);// 当前行
                    int firstColumnIndex = currentRow.getFirstCellNum(); // 首列
                    int lastColumnIndex = currentRow.getLastCellNum();// 最后一列
                    for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) {
                        Cell currentCell = currentRow.getCell(columnIndex);// 当前单元格
                        String currentCellValue = this.getCellValue(currentCell, true);// 当前单元格的值
                        System.out.print(currentCellValue + "t");
                    }
                    System.out.println("");
                }
                System.out.println("======================================================");
            }
        } catch (Exception e) {
            //e.printStackTrace();
        } finally {
            if (workbook != null) {
                try {
                    workbook.close();
                } catch (IOException e) {
                    //e.printStackTrace();
                }
            }
        }
    }

    
    public String getCellValue(Cell cell, boolean treatAsStr) {
        if (cell == null) {
            return "";
        }

        if (treatAsStr) {
            // 虽然excel中设置的都是文本,但是数字文本还被读错,如“1”取成“1.0”
            // 加上下面这句,临时把它当做文本来读取
            cell.setCellType(Cell.CELL_TYPE_STRING);
        }

        if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
            return String.valueOf(cell.getBooleanCellValue());
        } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
            return String.valueOf(cell.getNumericCellValue());
        } else {
            return String.valueOf(cell.getStringCellValue());
        }
    }
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5575770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存