精华内容
下载资源
问答
  • java批量插入数据的一种实现 前言 定义了批量操作的接口,基于PreparedStatement和反射原理实现方法,适用于有计划的批量导入的业务需求,例如(1)定期导入大量数据到业务表,(2)接口接收批量数据入库!经实践,几...

    java非工具方法,批量导入数据的小白方法

    ~定义了批量操作的接口,基于PreparedStatement和反射原理实现方法,适用于有计划的批量导入的业务需求,例如(1)定期导入大量数据到业务表,(2)接口接收批量数据入库!经实践,几千万级的导入,可以在几分钟内完成。

    ~有时候觉得,还是原生SQL来的干脆。简单的代码是一种美,可以我还是把它变得臃肿了,是在是懒的动它了。代码在下载资源里备用。(https://download.csdn.net/download/marsface/12376475)

    展开全文
  • 今天在网上找了一个批量数据导入到es中的java代码,代码主要逻辑如下:// 读取要导入数据的文件 BufferedReader br = new BufferedReader(new FileReader( "D:\\test\\test.txt")); String json = null; int count...

    今天在网上找了一个批量数据导入到es中的java代码,代码主要逻辑如下:

    // 读取要导入数据的文件
    BufferedReader br = new BufferedReader(new FileReader(
    		"D:\\test\\test.txt"));
    String json = null;
    int count = 0;
    // 开启批量插入
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    while ((json = br.readLine()) != null) {
    	bulkRequest.add(client.prepareIndex("test", "all")
    			.setSource(json));
    	// 每一千条提交一次
    	if (count % 1000 == 0) {
    		bulkRequest.execute().actionGet();
    		System.out.println("提交了:" + count);
    	}
    	count++;
    }
    bulkRequest.execute().actionGet();
    System.out.println("插入完毕");
    br.close();
    运行后发现一个问题,我100多万条的数据,导入到es中怎么生成了1000多万条,而且还是在没有完全导入的情况下

    然后用小批量数据导入到es,再把这些数据导出来,发现有好多重复的数据

    为什么会重复呢,原因是在每一千条提交一次代码这块,第一次一千条提交了,并没有把bulkRequest置空,所以第二次提交的时候,会提交两千条,包括第一次已经提交的一千条,然后我们自己也没有设置_id,所以es会自动给数据生成一个_id,即使是重复的数据,搞清楚了原因,下面来说解决方法,主要有两种:

    第一种就是在提交了一千条后,对bulkRequest进行重置,因为bulkRequest并没有重置的方法,所以可以新建一个bulkRequest,类似于重置,具体代码如下:

    // 读取要导入数据的文件
    BufferedReader br = new BufferedReader(new FileReader(
    		"D:\\test\\test.txt"));
    String json = null;
    int count = 0;
    // 开启批量插入
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    while ((json = br.readLine()) != null) {
    	bulkRequest.add(client.prepareIndex("test", "all")
    			.setSource(json));
    	// 每一千条提交一次
    	if (count % 1000 == 0) {
    		bulkRequest.execute().actionGet();
    		//此处新建一个bulkRequest,类似于重置效果
    		bulkRequest = client.prepareBulk();
    		System.out.println("提交了:" + count);
    	}
    	count++;
    }
    bulkRequest.execute().actionGet();
    System.out.println("插入完毕");
    br.close();
    第二种就是自己设置_id,确保每一条数据只有一个_id,这样的话,即使数据重复了,因为_id是一样的,所以es会进行更新,这样的话并没有从根源上解决数据重复的问题,只是重复数据会更新,这样的话效率会慢,具体代码如下:

    // 读取要导入数据的文件
    BufferedReader br = new BufferedReader(new FileReader(
    		"D:\\test\\test.txt"));
    String json = null;
    int count = 0;
    // 开启批量插入
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    while ((json = br.readLine()) != null) {
        //设置_id为count
    	bulkRequest.add(client.prepareIndex("test", "all",
    	                   String.valueOf(count)).setSource(json));
    	// 每一千条提交一次
    	if (count % 1000 == 0) {
    		bulkRequest.execute().actionGet();
    		//此处新建一个bulkRequest,类似于重置效果
    		System.out.println("提交了:" + count);
    	}
    	count++;
    }
    bulkRequest.execute().actionGet();
    System.out.println("插入完毕");
    br.close();

    建议使用第一种方法,效率会快很多。



    展开全文
  • java 批量导入excel数据

    热门讨论 2012-04-04 12:46:37
    java平台中批量将excel表格中数据导入到数据库中
  • 主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 产品说导入太慢了,一样的数据量另外一个系统只需要1分钟,我们要5分钟。。。。 开始以为是因为POI在解析07版本的Excel时候,因为数据量太多所以慢了,后面看下日志,发现是在入库的时候花的时间。 原因:  原来...

    项目上线测试。产品说导入太慢了,一样的数据量另外一个系统只需要1分钟,我们要5分钟。。。。

    开始以为是因为POI在解析07版本的Excel时候,因为数据量太多所以慢了,后面看下日志,发现是在入库的时候花的时间。

    原因:

      原来的更新不是批量执行,是一条条执行,所以太慢了

        try
        {
          conn.setAutoCommit(false);
          for (String sql : sqllist)
          {
            stmt = conn.prepareStatement(sql);
            recentSql = sql;
            stmt.executeUpdate();
            stmt.close();
          }
          conn.commit();
          flag = true;
        }

    优化:

      先把批量的sql添加到列表中,再一次性提交执行

            try {// 关闭事务自动提交
                conn.setAutoCommit(false);
                stmt = conn.createStatement();
                Long startTime = System.currentTimeMillis();
                for (String sql : sqllist) {
                    // 把一个SQL命令加入命令列表
                    stmt.addBatch(sql);
                }
                // 执行批量更新
                stmt.executeBatch();
                // 语句执行完毕,提交本事务
                conn.commit();
                flag = true;
                Long endTime = System.currentTimeMillis();
                log.info("用时:" + (endTime - startTime));
            }

     

    转载于:https://www.cnblogs.com/qyy1207/p/9605957.html

    展开全文
  • java批量导入Excel数据到数据库

    千次阅读 2018-01-24 17:15:26
    * 读取出filePath中的所有数据信息 * @param filePath excel文件的绝对路径 */ public static void getDataFromExcel2(String filePath,Person person){ //判断是否为excel类型文件 if (!filePath....
    public class ImportFile {
        /**
         * @param cell 一个单元格的对象
         * @return 返回该单元格相应的类型的值
         */
        public static String getRightTypeCell(Cell cell){
            cell.setCellType(Cell.CELL_TYPE_STRING);
            return cell.getStringCellValue();
        }
        /**
         * 读取出filePath中的所有数据信息
         * @param filePath excel文件的绝对路径
         */
        public static void getDataFromExcel2(String filePath,Person person){
            //判断是否为excel类型文件
            if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx")){
                System.out.println("文件不是excel类型");
            }
            FileInputStream fis =null;
            Workbook wookbook = null;
            int lineNum = 0;
            Sheet sheet = null;
            try{
                //获取一个绝对地址的流
                fis = new FileInputStream(filePath);
                //2003版本的excel,用.xls结尾, 2007版本以.xlsx
                if(filePath.endsWith(".xls")){
                    wookbook = new HSSFWorkbook(fis);//得到工作簿
                }else{
                    wookbook = new XSSFWorkbook(fis);//得到工作簿
                }
                //得到一个工作表
                sheet = wookbook.getSheetAt(0);
                //获得表头
                Row rowHead = sheet.getRow(0);
                //列数
                int rows = rowHead.getPhysicalNumberOfCells();
                //行数
                lineNum = sheet.getLastRowNum();
                if(0 == lineNum){
                    System.out.println("Excel内没有数据!");
                }
                getData(sheet, lineNum, rows, person);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
        public static  void  getData(Sheet sheet, int lineNum, int rowNum, Person person){
            //获得所有数据
            for(int i = 1; i <= lineNum; i++){
                //获得第i行对象
                Row row = sheet.getRow(i);
                List<String> list = new ArrayList<>();
                for(int j=0; j<rowNum; j++){
                    String str = getRightTypeCell(row.getCell(j));
                    list.add(str);
                }
                person.setName(list.get(0));
                person.setAge(Integer.valueOf(list.get(1)));
                person.setPwd(list.get(2));
                System.out.println(person.toString());
            }
        }
        public static void main(String[] arg){
            Person person = new Person();
            getDataFromExcel2("E:\\sss.xlsx", person);//传对象是为了让该方法灵活
        }
    }
    /**
     * Created by hsq 11:07 2018/1/24
     */
    public class Person {
    
        private String name;
        private Integer age;
        private String pwd;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }

    展开全文
  • 主要为大家详细介绍了java实现批量导入Excel表格数据到数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Java实现批量导入excel表格数据到数据库中的方法,结合实例形式详细分析了java导入Excel数据到数据库的具体步骤与相关操作技巧,需要的朋友可以参考下
  • 实现从Excel批量导入数据到MySQL 数据库中,可以同时导入多张Excel表,使用时在excel.table 中配置需要导入的表及可!
  • 主要为大家详细介绍了Java中excel表数据批量导入方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了java使用POI批量导入excel数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java开发使用Excel批量导入数据

    千次阅读 2016-05-20 17:17:09
    Excel批量导入数据 1. 问题场景 考试系统开发中,类似考题、学生信息等,手动录入太繁杂,在excel当中编辑好再导入相对便捷,因此需要这样一个接口。 2. 实现方法 Dao层省略,只列出接口层和服务层处理逻辑: ...
  • Java API实现向Hive批量导入数据

    万次阅读 2017-12-27 18:24:39
    Java程序中产生的数据,如果导入oracle或者mysql库,可以通过jdbc连接insert批量操作完成,但是当前版本的hive并不支持批量insert操作,因为需要先将结果数据写入hdfs文件,然后插入Hive表中。 package ...
  • 使用excel批量导入数据
  • Java实现从excel中批量高效导入数据到数据库中,包括图片的导入存储,读取图片显示在jsp页面等,需要下载JspSmartUpload.jar和jxl.jar两个jar包,将两个包导入项目才能运行
  • java操作txt或xls文件批量导入数据

    万次阅读 2011-03-18 13:26:00
    java操作txt或xls文件批量导入数据   我们经常碰到导入批量数据到数据库的,可以通过txt或者xls文件直接导入数据库,但是在程序中我们会有些需要自己处理的数据,在导入到数据库,这就要通过程序来...
  • 项目整合业务数据汇总录入数据库,数据规模为200~300w每月,按要求需要在月初导入上月全部数据。 要做到项目隔离。 要保证数据完整性。 数据导出方案:采用多线程读写配合文件服务器,可以保证数据导出效率。 ...
  • 消费kafka数据,然后批量导入到Elasticsearch,本例子使用的kafka版本0.10,es版本是6.4,使用bulk方式批量导入到es中,也可以一条一条的导入,不过比较慢。 <groupId>org.elasticsearch <artifactId>elastic...
  • java+elasticsearch批量导入数据

    千次阅读 2016-05-06 15:23:28
    废话不多说 直接上代码 BulkProcessor bulkProcessor = BulkProcessor.builder( client, new BulkProcessor.Listener() { public void beforeBulk(long executionId,
  • 导入Excel数据,验证数据是否符合标准,如果不符合则返回所有错误的行数,数据量每个Excel为2w~3w左右数据量,导入较慢,通过线程池把数据分块为每1000条为一批数据,同时导入数据库提高速度。 二、Excel文件标准 ...
  • java把excel数据批量导入到数据库

    千次阅读 2015-05-25 15:12:52
    java把excel数据批量导入到数据库中,java导入excel数据代码如下 1. public List GetFromXls(String xlsname){ 2.  3. List choices = new ArrayList();  4. Choice choice=null; 5. try
  • 话不多说,代码如下,自己灵活运用。 Connection conn = null; PreparedStatement ps = null; try { conn = JdbcUtil.getConn(jdbcName, jdbcUrl, userName, password); int size = lists.size();...
  • java 使用jxl 批理导入数据到数据库,需要先加入jxl.jar
  • 补充:对于批量这个概率不是太清楚;Zip包里边图片,一个节目对应三张。 前面的假设是针对不超过200M的上传数据,现在数据量增加了,想做一个新思路的解决方法,求大家给点点子,欢迎一起研究这个问题 感谢:各位...
  • java实现数据批量导入(mysql) 在后台管理中,有时候系统管理员需要将后台数据进行批量导入到数据库中,在这里我们介绍一种方法。注:在本案例中导入的数据量并不大,只是用来做微小体量的数据导入,所以没有考虑大...
  • 使用java MapReduce job 批量导入大额数据到Hbase

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,056
精华内容 15,222
关键字:

java批量导入数据

java 订阅