Demo直接拿来用:从Excel读取数据动态生成SQL

2021-10-08 15:42:12 浏览数 (1)

关于"Demo拿来直接用"

本系列文章为大家提供常用小工具的Demo

侧重点并非代码如何实现,因为大家都能写

目的是为大家节省开发时间,力求“拿来直接就能用

用最快的时间完成开发任务

从Excel读取数据动态生成SQL

01 | 效果演示

excel数据:

执行Demo之后:

生成脚本文件

同时控制台输出

02 | 拿来吧你

源码分为三部分:

  1. 自定义配置
  2. excel文件解析
  3. 输出脚本文件

大家无需关心后面两部分,只需完成第一部分的配置即可使用。

详细说明我已在注释中说明,以下为源码:

代码语言:javascript复制
    /**
     * Demo拿来直接用:从Excel读取数据动态生成SQL
     *
     * 关于“Demo拿来直接用”
     * 本系列文章为大家提供常用小工具的Demo
     * 侧重点并非代码实现,因为大家都能写
     * 目的是为大家节省开发时间,力求“拿来直接就能用”,用最快的时间完成开发任务
     *
     * @throws Exception
     */
    @Test
    public void insertFromExcel() throws Exception{

        /**
         * 按需配置项目
         */
        //源文件路径
        String inFilePath = "D:\demo\测试.xlsx";
        //sheet页
        int sheetNum = 0;
        //表名
        String tableName = "`t_test`";
        //字段
        String columns =  "id`,"  
                "`column1`,"  
                "`column2`, "  
                "`column3`, "  
                "`column4`, "  
                "`column5`";
        //字段个数
        int columnsNum = 6;
        //是否生成UUID
        boolean makeUUID = false;
        //日期类型格式转换
        String simpleDateFormat = "yyyy/MM/dd";
        //空值填充
        String ifNull = "";

        //脚本文件输出路径
        String outFilePath = "D:\demo\jiaoben.txt";


        /**
         * 解析Excel文件
         */
        XSSFWorkbook book = new XSSFWorkbook(inFilePath);
        XSSFSheet sheet = book.getSheetAt(sheetNum);
        StringBuilder insertr =new StringBuilder("");
        log.info("======================导入软件脚本-开始========================================");
        for (int i = 0; i < sheet.getLastRowNum() 1; i  ) {
            XSSFRow row = sheet.getRow(i);
            insertr.append("INSERT INTO "   tableName   "("   columns   ") t"   "VALUES(");
            /**
             * 循环每列数据,动态拼接字段值
             */
            //是否生成uuid
            if(makeUUID){
                insertr.append("'"   UUID.randomUUID().toString().replace("-", "").toLowerCase()   "',");
            }
            for(int j = 0;j < columnsNum;j  ){
                if(null != row.getCell(j)){
                    /**
                     * 判断Excel中每一列的内容类型
                     * 可根据自己的需求修改逻辑
                     */
                    //字符串
                    if(row.getCell(j).getCellType() == CellType.STRING){
                        insertr.append("'"   row.getCell(j).toString()   "',");
                    }
                    //数字
                    else if(row.getCell(j).getCellType() == CellType.NUMERIC){
                        //日期格式处理
                        if (DateUtil.isCellDateFormatted(row.getCell(j))){
                            Date date = row.getCell(j).getDateCellValue();
                            //格式转换
                            SimpleDateFormat sdf = new SimpleDateFormat(simpleDateFormat);
                            String format = sdf.format(date);
                            insertr.append("'"   format   "',");
                        }
                        //纯数字格式处理
                        else {
                            // 正常取值会带小数点.0,转long去掉小数点
                            insertr.append( (long)row.getCell(j).getNumericCellValue()   ",");
                        }

                    }
/*                    //布尔
                    else if(row.getCell(j).getCellType() == CellType.BOOLEAN){
                        insertr.append("'"   row.getCell(j).getBooleanCellValue()   "',");
                    }
                    //公式
                    else if(row.getCell(j).getCellType() == CellType.FORMULA){
                        insertr.append("'"   row.getCell(j).getCellFormula()   "',");
                    }
*/
                }else {
                    insertr.append("'"   ifNull   "',");
                }

            }

            insertr.deleteCharAt(insertr.length()-1);
            insertr.append(");n");
        }


        /**
         * 输出文件
         */
        File file = new File(outFilePath);
        OutputStream fos = new FileOutputStream(file);
        fos.write(insertr.toString().getBytes("UTF-8"));
        fos.close();


        /**
         * 输出控制台
         */
        System.out.println(insertr);
        log.info("======================导入软件脚本-结束========================================");
    }

觉得有用的话试试分享给需要的伙伴吧

0 人点赞