解析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\015467\\Desktop\\poi\\sit01\\sit01.csv";
        String outPath = "C:\\Users\015467\\Desktop\\poi\\sit01\0827b-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;
        }
    }




}
                    

  

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 俞敏洪与新东方_新东方俞敏洪现状

    俞敏洪与新东方_新东方俞敏洪现状俞敏洪与新东方“江阴模式”助俞敏洪考上北大  俞敏洪,1962年出生于江苏省江阴。  俞敏洪出生在一个普通的农村家庭里,父亲是一名木匠,母亲则是当地生产队的妇女队长,她有与这一职位对应果敢的作风。俞敏洪还有一个姐姐,是一名赤脚医生。作为一个农家孩子,俞敏洪回忆:我从小就在农田里干活,插秧、割稻、撒猪粪,样样都干……  母亲希望他的人生能有某种意义上的改变,希望…

  • jps详解

        首先jps的目录在java中,如下图所示。jps主要用于查看java进程,在查看hdfs的启动进程时可以代替ps-ef|grephdfs命令。    在讨论jps时,我们可以把用户切换到root用户下,然后jps查看进程,会出现以下问题,如下图所示,显示进程信息不可用(processinformationunavailale)  在企业中,若进程不可用,先用ps-ef…

  • sesvc.exe_alg是什么进程

    sesvc.exe_alg是什么进程今天公司的一台电脑一点右键就没有反应,通过任务管理发现每次启动都会有一个“Excel”进程,第一感觉就是中毒了,在网上找到了无暇解决方案杀毒方法:(切记:在操作过程中使用“右键->打开”,不可双击。)1.结束注册表中的fun.xls.exe的进程(建议选中fun.xls.exe->右键->转到进程,查找到“algsrvs.exe”单击它,再选择“…

  • 香港免备案服务器是合法的吗?「建议收藏」

    香港免备案服务器是合法的吗?不管是否使用过香港服务器的用户,应该都听说过香港服务器可以不用备案,虽然大多数用户不太清楚香港服务器为什么不用备案,但知道香港服务器免备案是合法的就足够了,我在这里将说明关于香港服务器免备案的一切疑问。所谓的网站备案是指的根据国家互联网的规定,网站所有者必须向国家工信部申请网站内容审核和实名备案,有的网站还需要向当地的公安部进行监管备案,所有放在国内服务器上的网站只能通过备案才能访问上线。1、香港服务器为什么不用备案?  这主…

  • 均方误差与方差的区别_平均数 方差 标准差

    均方误差与方差的区别_平均数 方差 标准差一、百度百科上方差是这样定义的:看这么一段文字可能有些绕,那就先从公式入手,对于一组随机变量或者统计数据,其期望值我们由E(X)表示,即随机变量或统计数据的均值,然后对各个数据与均值的差的平方求和,最后对它们再求期望值就得到了方差公式。这个公式描述了随机变量或统计数据与均值的偏离程度。二、方差与标准差之间的关系就比较简单了根号里的内容就是我们刚提到的那么问题来了,

  • select is not valid at this_Mysql修改密码

    select is not valid at this_Mysql修改密码今天在写MySQL相关的文章演示新增用户的时候出现了如下报错信息【1142-SELECTcommanddeniedtouser’dev’@’localhost’fortable’user’】,从提示来看就是”user”表的”dev”用户不能执行”SELECT”命令。(其实就是没有权限,用管理员账号给他授权就行了)…

发表回复

您的电子邮箱地址不会被公开。

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