需求:根据客户号和证件号,查询出折算保费和积分值,插入到黄色列。

最近客户提取数据的频率是越来越高了,数据量越来越大了,方法1出现了一次重大事故,先只能使用方法2了,虽然麻烦一点,也是没办法啊。

  1. 方法1:使用mysql客户端,建临时表—>导入excel—>使用sql查询修改临时表缺少的数据—>导出excel—>删临时表。此方法简单粗暴,但不能用于大数据量,易锁表,尤其是读写分离时会导致同步失败
  2. 方法2:当然就信手拈来的java代码了。虽然简单,也想做个笔记。这里是查库数据,遍历excel数据,证件号相同时插入excel。启动项目后,main'方法执行就ok了。下次换了excel,变更下行或列。
    部分包
    import org.apache.commons.lang.StringUtils;
    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.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    @Transactional
    @Service
    public class AddUserImpl implements AddUser {
    
    
        public void getIslog(String filepath) {
            OutputStream out = null;
    
            List<Model1> model1list = adduserDAO.getIslog();//查询数据:
            try {
                File file = new File(filepath);
                BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
                Workbook workBook = new XSSFWorkbook(in);//获取excel
                Sheet sheet = workBook.getSheetAt(0);//获取第一个sheet页
                int i = 0;//用于显示空行
                int j = 0;//已经匹配到的数据行
                for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {//从表格第二行开始遍历
                    i += 1;
                    Row row = sheet.getRow(rowNum);//获取行
                    Cell cell = row.getCell(7);//获取该行的第7列的单元格
                    if (null == cell) {
                        System.out.println("null====第" + i + "行");
                        continue;
                    }
                    cell.setCellType(Cell.CELL_TYPE_STRING);//设置单元格格式,证件号多为纯数字
                    String idno = cell.getStringCellValue();//获取单元格数据
                    idno = StringUtils.deleteWhitespace(idno);//删除字符串中的空格,不然怎么equals
                    for (Model1 model1 : model1list) {
                        if (null != model1.getIdno() && model1.getIdno().equals(idno)) {
                            Cell cell6 = row.createCell(11);//创建单元格
                            cell6.setCellValue(null == model1.getIsLog() ? "否" : model1.getIsLog());//插入单元格数据,不能为空
                            Cell cell7 = row.createCell(12);
                            cell7.setCellValue(null == model1.getIsReu() ? "否" : model1.getIsReu());
                            Cell cell9 = row.createCell(14);
                            cell9.setCellValue(null == model1.getPoint() ? "0" : model1.getPoint());
                            j += 1;
                            System.out.println("" + j);
                            continue;
                        }
                    }
                }
                out = new FileOutputStream(filepath);
                workBook.write(out);//最后一顶要写入输出流
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    有次博文定义的实体类名字有人没看明白,这里Model1是实体类,顺便把实体类字段也放进来算了。mapper层就不写了,要什么数据查什么数据就好了

    public class Model1 implements Serializable {
    
        private static final long serialVersionUID = 7104046421371851608L;
        
        private String isLog;
        private String isReu;
        private String idno;
        private String point;
    
        public String getIsLog() {
            return isLog;
        }
    
        public void setIsLog(String isLog) {
            this.isLog = isLog;
        }
    
        public String getIsReu() {
            return isReu;
        }
    
        public void setIsReu(String isReu) {
            this.isReu = isReu;
        }
    
        public String getIdno() {
            return idno;
        }
    
        public void setIdno(String idno) {
            this.idno = idno;
        }
    
        public String getPoint() {
            return point;
        }
    
        public void setPoint(String point) {
            this.point = point;
        }
    }
    

     

Logo

更多推荐