批量执行插入操作-帮同事做

Posted bee-home

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量执行插入操作-帮同事做相关的知识,希望对你有一定的参考价值。

package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.*;

/**
 * 执行大批量插入文本
 */
@Service
public class TxtServiceImpl implements TxtSevice{

    public  static int runningCount = 0; //正在执行的个数
    public  static int sucCount = 0; //成功个数
    public static int failCount = 0; //失败个数3

    @Value("${srcfile}")
    public String srcFile;

    @Value("${desfile}")
    public String desfile;

    @Value("${perprint}")
    public int perprint;

    @Autowired
    private JdbcTemplate jdbcTemplate;


    @Override
    @PostConstruct//启动后自己执行
    public  void insertTxt() throws IOException {

            String name = srcFile;
            File file = new File(name);
            InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bf = new BufferedReader(inputReader);
            // 按行读取字符串
            String str = "";
            while ((str = bf.readLine()) != null) {
                //str = new String(str.getBytes("gb2312"), "UTF-8");//将读取出来的GBK格式的代码转换成UTF-8
                try{
                    jdbcTemplate.update(str);
                    sucCount++;
                    printRuningCount();
                }catch (Exception e) {
                    writeFile(str);
                    failCount++;
                    printRuningCount();
                }
                //System.out.println(str);
            }
            bf.close();
            inputReader.close();
            System.out.println("执行总条数:"+(sucCount+failCount)+",  成功"+sucCount+"次  ,"+"失败"+failCount+"次  ,");

    }


    /**
     * 每xxx打印一次
     */
    private void printRuningCount(){
        runningCount++;
        if(runningCount%perprint==0){//每1000打印一次
            System.out.println("当前已经执行 "+runningCount+" 条");
        }
    }

    /**
     * 失败写文件
     * @param str
     * @throws IOException
     */
    public void writeFile(String str) throws IOException {
        File file = new File(desfile);
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        BufferedWriter bw =null;
        try{
            if (!file.exists()) {
                boolean hasFile = file.createNewFile();
                if(hasFile){
                    //System.out.println("文件不存在,创建新文件");
                }
                fos = new FileOutputStream(file);
            } else {
                //System.out.println("文件已经存在,正在进行追加数据");
                fos = new FileOutputStream(file, true);
            }
            osw = new OutputStreamWriter(fos, "UTF-8");
            bw = new BufferedWriter(osw);
            bw.write(str);
            bw.newLine();//换行
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            bw.close();
            osw.close();
            fos.close();
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!-- plugins -->

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>



        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>

    <!--    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <repositories>
        <repository>
            <id>myRepository</id>
            <name>Repository for me</name>
            <url>http://192.168.100.10/nexus/content/groups/public/</url>
        </repository>
        <repository>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>Central Repository</name>
            <url>http://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>



</project>
package com.example.demo;

import com.example.demo.service.TxtSevice;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.io.IOException;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    @Resource
    TxtSevice txtService;

    @Test
    public void contextLoads() throws IOException {

        txtService.insertTxt();
    }

    @Test
    public void contextLoads1() throws IOException {
        System.out.println("吞吞吐吐");
    }


}
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

srcfile=C:/All_Files/sql.txt
desfile=C:/All_Files/failsql.txt
perprint=1000

 

以上是关于批量执行插入操作-帮同事做的主要内容,如果未能解决你的问题,请参考以下文章

mysql批量插入数据

Hive/Impala批量插入数据

DocumentFragment批量操作dom

Oracle 批量插入数据怎么做

Oracle 批量插入数据怎么做

怎样在多个html文件中一次性快速批量加入同样的一段htm代码