将xls/csv数据导入到ES中

摘要:
importorg.springframework.context.annotation.Bean;publicclassCsvToMysql{static{try{Class.forName(“com.mysql.cj.jdbc.Driver”);characterEncoding=utf8&“root”);Stringline=null;split[7]);
一.导入MySQL数据库中

(1)通过Navicat导入向导直接导入即可

将xls/csv数据导入到ES中第1张

(2)代码方式导入

【如果字段太多,这种方式做肯定不现实】

csv导入mysql数据库 -- 按需修改即可

package com.blb.mysql_java_es.util;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class CsvToMysql {

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {

        }
    }

    //从csv中去读取数据
    public void readData() throws IOException, SQLException {

        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/temp1?characterEncoding=utf8&serverTimezone=GMT", "root", "root");

        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("F://java_ES//112.csv"),"GBK"));
        String  line = null;
        String sql = "insert into tb_temp1 values(?,?,?,?,?,?,?,?)";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        int i = 1;
        while ((line = reader.readLine())!= null){
            String[] split = line.split(",");
            preparedStatement.setString(1,split[0]);
            preparedStatement.setString(2,split[1]);
            preparedStatement.setString(3,split[2]);
            preparedStatement.setString(4,split[3]);
            preparedStatement.setString(5,split[4]);
            preparedStatement.setString(6,split[5]);
            preparedStatement.setString(7,split[6]);
            preparedStatement.setString(8,split[7]);
            preparedStatement.addBatch();
            if (i % 100 == 0){
                preparedStatement.executeBatch();
                preparedStatement.clearBatch();
            }
            i++;
        }
        preparedStatement.executeBatch();
        preparedStatement.clearBatch();
        preparedStatement.close();
        conn.close();

    }

    public static void main(String[] args) throws IOException, SQLException {
        new CsvToMysql().readData();
    }

}

xls导入mysql数据库 -- 按需修改即可

package com.blb.mysql_java_es.util;

import com.alibaba.excel.EasyExcel;
import com.blb.mysql_java_es.listener.UserListener;
import com.blb.mysql_java_es.pojo.User;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 最简单的读:
 * 1.创建excel对应的实体对象
 * 2.由于默认的是一行一行的读取excel,所以需要创建一个excel一行一行的回调监听器
 * 3.直接调用即可
 */

public class ExcelToMysql {

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/temp1?characterEncoding=utf8&serverTimezone=GMT", "root", "root");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //批量保存
    public static void batchRead(List<User> userList){
        Connection conn = getConnection();
        String sql = "insert into tb_temp1 values(?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            for (User user:userList) {
                preparedStatement.setString(1,user.getUid()+"");
                preparedStatement.setString(2,user.getUname());
                preparedStatement.setString(3,user.getUsex());
                preparedStatement.setString(4,user.getUage());
                preparedStatement.setString(5,user.getAddress());
                preparedStatement.setString(6,user.getJob());
                preparedStatement.setString(7,user.getJobyear());
                preparedStatement.setString(8,user.getSkill());
                preparedStatement.addBatch();
            }
            preparedStatement.executeBatch();
            preparedStatement.clearBatch();
            preparedStatement.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void readData() throws SQLException {
        //指定需要去哪个class去读,然后读取到第一个sheet文件流就会自动关闭
        EasyExcel.read(new File("F://java_ES//114.xls"), User.class,new UserListener(new ArrayList<User>())).sheet().headRowNumber(0).doRead();
    }

    public static void main(String[] args) {
        try {
            readData();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}
二.导入ES数据库中
    /**
     * 如何读取XLS文件中的数据,可以通过Kettle工具直接做
     *
     * 读取xls的一些技术:-- 可以读取xls的数据,也可以导出为xls格式的数据
     * 阿里巴巴        easyexcel
     * 韩国人写的    jxls
     * apache        POI(原生)
     *
     * 我们使用的是easyexcel,简单易操作
     */
    /**
     * 推荐阅读:
     * https://github.com/alibaba/easyexcel/
     *
     * 使用最简单的easyexcel读取数据
     * 由于是默认一行一行的读取excel的,所以需要创建一个excel一行一行的回调监听器
     */
    //批量从xls表中添加数据 -- 单条插入,数据量大效率就很低
    @Test
    void insert() throws IOException {
        //文件的路径
        String fileName = "F:\企查查\test.xls";
        //需要指定去哪个excel中读取,然后读取到第一个sheet之后文件流就会自动关闭
        /**
         * new File(fileName):需要读取的文件
         * User.class:读出来的数据需要绑定哪一个类
         * new UserListener():读出来的数据需要如何处理
         */
        ArrayList<User> users = new ArrayList<>();
        EasyExcel.read(new File(fileName),User.class, new UserListener(users)).sheet().doRead();
        int i = 2;
        for (User user:users){
            System.out.println(user); //User(uid=1, uname=张三, upwd=123456)
            insertData1("test","std",i+"",user);
            i++;
        }
    }

    //从xsl中批量插入数据 -- 对于海量数据效率非常高
    @Test
    void batchInsert() throws IOException {
        //文件的路径
        String fileName = "F:\企查查\test.xls";
        ArrayList<User> users = new ArrayList<>();
        EasyExcel.read(new File(fileName),User.class,new UserListener(users)).sheet().doRead();
        batchInsert1("test","std",users,16);
    }

    public void insertData1(String index, String type, String id, User user) throws IOException {
        IndexRequest request = new IndexRequest(index).type(type).id(id);
        request.source(JSON.toJSONString(user),XContentType.JSON);
        IndexResponse index1 = restHighLevelClient.index(request, RequestOptions.DEFAULT);
    }

    /**
     *
     * @param index 索引数据库的名字
     * @param type 文档类型
     * @param userList 批处理的数据
     * @param i 起始id
     */
    public void batchInsert1(String index, String type, List<User> userList,int i) throws IOException {
        BulkRequest bulkRequest = new BulkRequest(index,type);
        for (User user:userList){
            IndexRequest request = new IndexRequest();
            request.id(i+"");
            request.source(JSON.toJSONString(user),XContentType.JSON);
            bulkRequest.add(request);
            i++;
        }
        restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
    }

免责声明:文章转载自《将xls/csv数据导入到ES中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于软件评审的一些想法cookie,session原理,以及如何使用chrome查看。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

29网络偷包

偷包,就是在网络传输过程中,截取某一数据包,进行解析获取其发送的数据。 原理与TCP通信类似。只需在创建套接字时,参数不同。 fd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); PF_INET                      IPV4协议 SOCK_RAW            对原始网络协议访问 IPPRO...

PivotGridControl控件应用

一、概述        PivotGridControl是DevExpress组件中的一个重要控件,在数据多维分析方面具有强大的功能,它不仅可以分析数据库中的数据,而且还能够做联机分析处理(OLAP),并且支持多种数据仓库。前面的文章中介绍了如何用PivotGridControl制作交叉表部件,在智能窗体上展示交叉报表。本文将继续对PivotGridCon...

HTML页面使用layer弹出框输入数据

javascript中layer是一款近年来备受青睐的web弹层组件,layer.open对弹出框进行输入信息,并处理返回结果。详细介绍http://layer.layui.com/部署:将layer.js文件和skin目录复制到项目的./static/js目录中,在页面中引用js/layer.js <script >function add_...

第七章 mysql 事务索引以及触发器,视图等等,很重要又难一点点的部分

【索引】 帮助快速查询 MyISAM ,InnoDB支持btree索引 Memory 支持 btree和hash索引 存储引擎支持 每个表至少16个索引   总索引长度至少256字节   创建索引的优点: 1, 加快查询速度 2, 创建唯一索引来保证数据表中数据的唯一性 3,  实现数据的完整性 4, 实现数据的完整性,,加速表和表之间的连接, 5, 减少...

区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今POS的变体DPOS(Delegated Proof of Stake,股份授权证明)进一步削减算力的浪费,同时也加强了区块链的安全性。 不过,对于不需要货币体系...

理解mysql执行多表联合查询

阅读目录 一:inner join(内连接) 二:left join(左连接) 三:right join(右连接) 四:cross join(交叉连接) 五:union操作 六:node+mysql 多表联合查询 查询多张表一般有如下连接方法: 1)内连接:join, inner join2)外连接:left join, left outer jo...