解析excel拼接SQL 小脚本

解析excel拼接SQL 小脚本

由于数据同步原因,我们经常会受到对方给的excel文件去同步字段到数据库

这种情况遇到过多次,如果数据量小还好,手动拼一下Sql,如果对方给的同步数据过大,那么我采用了一个小脚本处理这件事

其实非常简单,读取同步excel,同时根据字段转存为sql文件,涉及到文件边读边写,然后处理拼接sql的操作

下面是 csv文件转sql语句

 

package com.group.wordskey.file;

import org.apache.commons.lang3.StringUtils;

import java.awt.*;
import java.io.*;

/**
 * Description:
 *
 * 
 * @date 2020/8/24 13:37
 */
public class FileReadSql{

    public static void main(String[] args) throws IOException{

        String path = "C:\\Users\\10015467\\Desktop\\poi\\sit01\\sit01.csv";
        String outPath = "C:\\Users\\10015467\\Desktop\\poi\\sit01\\200827b-aaa-DDL.sql";


        readFile(path,outPath);





    }

    public static StringBuilder readFile(String path,String outPath) throws IOException{
        File file = new File(path);
        File outFile = new File(outPath);
        StringBuilder result = new StringBuilder();
        OutputStream outputStream = null;
        BufferedReader br = null;
        try{
            outputStream = new FileOutputStream(outFile);

            br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
            int index = 0;
            String s = null;
            while((s = br.readLine())!=null){
                if(index != 0 ){
                    System.out.println(s);
                }
                index++;
                if(index == 1){
                    continue;
                }
                String[] split = s.split(",");
                int len = split.length - 1;
                //字段1
                String sku = formatStr(split[0]);
                //字段2
                String startDate = formatStr(split[1]);
                //字段3
                String deliveryTimeType = formatStr(split[2]);
                //字段4
                Integer clothesCount = Integer.valueOf(split[3]);
                //字段5
                Integer beltState = Integer.valueOf(split[4]);
                //字段6
                String seriesBrandName =  "\'\'";
                if(len >= 5){
                    seriesBrandName = formatStr(split[5]);
                    if(StringUtils.isBlank(seriesBrandName)){
                        seriesBrandName =  "\'\'";
                    }

                }
                //字段7
                String consumablesTypeName = "\'\'";
                if(len >= 6){
                    consumablesTypeName = formatStr(split[6]);
                    if(StringUtils.isBlank(consumablesTypeName)){
                        consumablesTypeName = "\'\'";
                    }
                }

                //字段8 ,因为这里是一个逗号分隔的字符串,所以放在最后解析,重新拼接
               //重新拼接成一个逗号分隔的字符串
                String colors =  "\'\'";
                if(len >= 7){
                    //提取颜色字段
                    if(len == 7){
                        colors = formatStr(split[7]);
                    }else {
                        StringBuffer sb = new StringBuffer();
                        for(int i = 7;i < split.length;i++){
                            if(i == len){
                                sb.append(split[i]);
                            }else {
                                sb.append(split[i]).append(",");
                            }
                        }
                        colors = sb.toString();
                    }
                    if(StringUtils.isBlank(colors)){
                        colors =  "\'\'";
                    }
                }

                String sql = "";
                sql = "UPDATE  basic_sku_extend set start_date = %S,delivery_time_type = %S,clothes_count=%S,belt_state=%S," +
                        "colors=%S,series_brand_name=%S,consumables_type_name=%S WHERE sku =  %S;";
                String format = String.format(sql,startDate,deliveryTimeType,clothesCount,beltState,colors,seriesBrandName,consumablesTypeName,sku);
                //写入文件
                format = format + System.lineSeparator();
                outputStream.write(format.getBytes("UTF-8"));

                result.append(format + System.lineSeparator());
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            br.close();
            outputStream.close();
        }
        return result;

    }

    public static String formatStr(String str){
        String result = "\'\'";
        if(str == null || result.equals(str)){
            return result;
        }else {
            str = "\'" + str + "\'";
            return str;
        }
    }




}
                    

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2567.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • activity 工作流程引擎-如何画流程图

    activity 工作流程引擎-如何画流程图前言:activity工作流引擎是当前最流行的工作流,最近公司一直在用这个感觉还是很好用的,学习过程中也有不少的坑所以简单记录一下相关知识的学习过程吧如何画流程图,这里使用浏览器端的一个工具和eclipse里面操作都差不多吧1.流程图里面的节点,如开始,子流程等都是通过拖拽的方式加载的2.一个节点通过点击即可选择下一个节点事件3.如果一个节点出现分支,或者判断的情况可以在流程线上设置…

    2022年7月27日
    26
  • navicat 激活码【注册码】「建议收藏」

    navicat 激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    45
  • Java加密类型和算法名称「建议收藏」

    Java加密类型和算法名称「建议收藏」Java加密类型和算法名称

    2022年4月23日
    89
  • ODS设计_ods dw

    ODS设计_ods dw1.数据调研2.确定数据范围需要把上端应用需求与ODS数据范围进行验证,以确保应用所需的数据都已经从业务系统中抽取出来,并且得到了很好的组织,以ER模型表示数据主题关系3.根据数据范围进行进一步的数据分析和主题定义把第一步生成的每个ER图中的实体进行分解,分解的结果仍以ER表示为佳4.定义主题元素定义主题、粒度、维、度量、存储期限a.定义维的概念特性:维…

    2022年9月26日
    2
  • 进程理论基础

    操作系统背景知识顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其

    2022年3月29日
    39
  • C语言pow函数(c语言中指数函数怎么打)

    展开全部C语言中的POW函数使用:#include#defineACCURACY100doublefunc1(doublet,intn);doublefunc2(doubleb,intn);doublepow2(doublea,doubleb);intmain(){printf(“%lf”,pow2(5.21,4.11));return0;}doublepow2(doublea,doubleb){…

    2022年4月11日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号