[简单]excel表格数据初始化为insert sql 语句

 excel 表格数据初始化为 insert sql 语句 :

    @ApiOperation(value = "excel 数据初始化 sql ")
    @PostMapping("/excelInit")
    public void dataMigration(@RequestParam("file") MultipartFile file) throws Exception {
        //获取sheet页的数据:
        ExcelReader reader = ExcelUtil.getReader(file.getInputStream(),"t_bank");
        //类似封装:org.apache.poi.ss.usermodel.WorkbookFactory.create(IoUtil.toMarkSupportStream(in), password(null)).getSheet(sheetName);


        List<Map<String,Object>> bankList = reader.readAll();
        //表头字段:bank_shield	account_name	bank_name	open_bank_name	bank_account	currency	bank_register_date warning_interval	frequency	statues	remark
        //字段含义 :银行顿号     账户名称	        银行名称	开户行名称/联行号	银行账号	币别	注册日期	调度时间	是否高频	预警状态	备注

        //最终导出的SQL List
        List<String> sQLList = new ArrayList<>();

        //遍历准入数据
        for (Map<String,Object> item: bankList){

            //获取日期类数据,处理成想要的字符串格式
            Object bank_register_date = item.get("bank_register_date");
            java.time.LocalDate localDate = null;
            if (U.isNotBlank(bank_register_date)) {
                LocalDateTime createDate = LocalDateTimeUtil.parse(bank_register_date.toString(), DateFormatType.YYYY_MM_DD_HH_MM_SS.getValue());
                 localDate = createDate.toLocalDate();
            }

            Map bankDataMap = new LinkedHashMap();
            //普通字段直接获取 put
            bankDataMap.put("bank_shield",item.get("bank_shield").toString());
            bankDataMap.put("account_name", item.get("account_name"));
            bankDataMap.put("bank_name", item.get("bank_name"));
            bankDataMap.put("open_bank_name", item.get("open_bank_name"));
            bankDataMap.put("bank_account", item.get("bank_account"));
            bankDataMap.put("currency", item.get("currency"));
            bankDataMap.put("bank_register_date", U.isBlank(localDate)?"": LocalDateTimeUtil.format(localDate,DateFormatType.YYYY_MM_DD.getValue()));
            bankDataMap.put("warning_interval", item.get("warning_interval"));
            bankDataMap.put("frequency", "否".equals(item.get("frequency"))?"LOW":"HIGH");
            bankDataMap.put("statues", "开启".equals(item.get("statues"))?"ENABLE":"DISABLE");
            bankDataMap.put("remark", item.get("remark"));

            bankDataMap.put("create_time", LocalDateTime.now());
            bankDataMap.put("create_user", "系统初始化");
            String bank_code = "-";
            if (U.isNotBlank(item.get("bank_name"))) {
                String bank_name = item.get("bank_name").toString();
                //枚举类处理:根据名称获取编码
                BankEnum anEnum = BankEnum.getCodeByDesc(bank_name);
                if (U.isNotBlank(anEnum)) {
                     bank_code = anEnum.getCode();
                }

            }
            bankDataMap.put("bank_code", bank_code);
            //最终组装 sQLList
            sQLList.add(getInsertSql("`dwh_fund`.t_bank_warning_config", bankDataMap));
        }

        for (String s:sQLList) {
            //输出insert sql
            System.out.println(s);
        }
    }



    public static String getInsertSql(String tableName, Map<String, Object> data) {
        String cols = null;
        String marks = null;

        for (Map.Entry<String, Object> entry : data.entrySet()) {
            String col = entry.getKey();
            Object val = entry.getValue();
            if (U.isNotBlank(val)) {
                cols = StringUtils.strcat(cols, ",", col);
                marks = StringUtils.strcat(marks, ",", sqlConstant(val));
            }
        }
        String sql = "INSERT INTO " + tableName + "(" + cols + ") VALUES (" + marks + ");";
        return sql;
    }

    static public String sqlConstant(Object value) {
        if (value == null) {
            return null;
        } else if (value instanceof java.util.Date) {
            return sqlDateConstant((java.util.Date) value);
        } else if (value instanceof LocalDate) {
            return sqlDateConstant((LocalDate) value);
        } else if (value instanceof LocalDateTime) {
            return sqlDateConstant((LocalDateTime) value);
        } else if (value instanceof String) {
            return sqlStringConstant((String) value);
        } else {
            return value.toString();
        }
    }

    static public String sqlStringConstant(String value)
    {
        //      if( sb!=null )
        return sqlStringConstantTo(value,null).toString();//return "'"+sb.toString() + value+"'";
//        return "'"+value+"'";
    }
    static private StringBuffer sqlStringConstantTo(String value,StringBuffer sb)
    {
        if( sb==null ) sb = new StringBuffer();
        sb.append('\'');
        for(;;) {
            int p = value.indexOf('\'');
            if( p<0 ) break;
//            if( sb==null )
//                sb = new StringBuffer(value.substring(0,p+1));
//            else
            sb.append(value.substring(0,p+1));
            sb.append('\'');
            value = value.substring(p+1);
        }
        sb.append(value);
        sb.append('\'');
        return sb;
    }

    static public String sqlDateConstant(LocalDateTime date) {
        int year = date.getYear(), month = date.getMonthValue(), day = date.getDayOfMonth();
        int h=date.getHour(),m=date.getMinute(),s=date.getSecond();
        return sqlDateConstant(year, month, day,h,m,s);
    }

    static public String sqlDateConstant(LocalDate date) {
        int year = date.getYear(), month = date.getMonthOfYear(), day = date.getDayOfMonth();
        return sqlDateConstant(year, month, day);
    }

    static public String sqlDateConstant(java.util.Date date) {
        if (date == null) return null;
        final int dateE[] = getDateElements(date);
        if ((dateE[3] != 0 || dateE[4] != 0 || dateE[5] != 0)) {
            return sqlDateConstant(dateE[0], dateE[1], dateE[2], dateE[3], dateE[4], dateE[5]);
        } else {
            return sqlDateConstant(dateE[0], dateE[1], dateE[2]);
        }
    }

    final static private String toStr2(int x) {
        return x < 10 ? "0" + x : "" + x;
    }

    static public String sqlDateConstant(int year, int month, int day, int hours, int min, int sec) {
        String d = "'";
        return d + year + '-' + toStr2(month) + '-' + toStr2(day) + ' ' + toStr2(hours) + ':' + toStr2(min) + ':' + toStr2(sec) + d;
    }
    static public String sqlDateConstant(int year, int month, int day) {
        String d = "'";
        return d + year + '-' + toStr2(month) + '-' + toStr2(day) + d;
    }

    public static int[]  getDateElements(java.util.Date date)
    {
        if( date==null )
            return null;
        final int hOffset = TimeZone.getDefault().getRawOffset()/(60*60*1000);
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"+(hOffset>0?"+"+hOffset:""+hOffset)+":00"));
        cal.setTime(date);
        int ymd[] = new int[7];
        ymd[0] = cal.get(Calendar.YEAR);
        ymd[1] = cal.get(Calendar.MONTH)+1;
        ymd[2] = cal.get(Calendar.DATE);
        ymd[3] = cal.get(Calendar.HOUR_OF_DAY);
        ymd[4] = cal.get(Calendar.MINUTE);
        ymd[5] = cal.get(Calendar.SECOND);
        ymd[6] = cal.get(Calendar.MILLISECOND);
        return ymd;

    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值