原创

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


作者 | 浩说编程
来源 | 公众号:浩说编程
[  用"内容"服务读者 | 让"代码"服务大众  ]

  

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

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

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

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


01 | 效果展示

    excel数据:

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

    执行Demo之后:

    生成脚本文件

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

    同时控制台输出

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

02 | 拿来吧你

    源码分为三部分:

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

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

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

 /**
     * 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("======================导入软件脚本-结束========================================");
    }


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

福利"上菜"

 不知不觉又到了经典"上菜"环节

兄弟们准备好了嘛!

今日菜系:

800道大厂面试题

1000道基础面试题

扫码 发送数字 "7"

找面试题再也不用东拼西凑,爽到飞起!

  




正文到此结束
本文目录