前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Demo直接拿来用:从Excel读取数据动态生成SQL

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

作者头像
浩说编程
发布2021-10-08 15:42:12
1K0
发布2021-10-08 15:42:12
举报
文章被收录于专栏:Java经验之谈Java经验之谈

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档