`
dbp_cn
  • 浏览: 85530 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

基于jdbc的大数据导出到excel

    博客分类:
  • java
 
阅读更多

 直接上代码:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

pubic class ExportData{
  public static void export(String sql) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connect = DriverManager.getConnection(
                "jdbc:mysql://172.31.50.39:3308/test_sce_doraemon?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&useCursorFetch=true&defaultFetchSize=1000" ,
                "root" ,
                "123456"
        );
    
        Statement statement = connect.createStatement();

        ResultSet resultSet = statement
                .executeQuery(sql);

        ResultSetMetaData metaData = resultSet.getMetaData();
        try {
            long start = System.currentTimeMillis();

            SXSSFWorkbook wb = new SXSSFWorkbook(100);
            Sheet sh = wb.createSheet();
            Row row = null;
            int i = 0;
            while ((resultSet.next())) {
                row = sh.createRow(i++);
                for (int column = 1; column <= metaData.getColumnCount(); column++) {
                    Cell cell = row.createCell(column);
                    if (i == 1) {
                        cell.setCellValue(metaData.getColumnLabel(column));
                    } else {
                        cell.setCellValue(resultSet.getString(metaData.getColumnLabel(column)));
                    }
                }
            }
            FileOutputStream out = new FileOutputStream("/work/test.xlsx");

            wb.write(out);
            out.close();
            wb.dispose();

            long end = System.currentTimeMillis();
            System.out.println("cost time: " + (end - start) / 1000 + "  s");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            statement.close();
            resultSet.close();
            connect.close();
        }

    }
}

 以上代码就是主要实现代码,主要是通过jdbc连接,一边读一边通过POI写excel,针对大数据导出性能非常好,亲测1000万的mysql测试数据导出70w只要30秒。

poi需要3.9以上,利用poi针对大数据优化的依赖,注意两个依赖的版本最好一致,免得出现莫名错误。

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.9</version>
</dependency>

 

问题:如果是通过Mybatis的实现,是通过动态生成,并且带参数的脚本,拿不到jdbc和具体sql怎么办?

解决:我们一般通过mybatis是通过 SqlSessionTemplate的selectList等方法来获取结果,这时候可以调用

public void select(String statement, Object parameter, ResultHandler handler) {
        this.sqlSessionProxy.select(statement, parameter, handler);
 }

 重写ResultHandler的实现,里面可以会获取每条记录,我的例子:

 final SXSSFWorkbook wb = new SXSSFWorkbook(100);
 final Sheet sh = wb.createSheet();
serviceSqlSession.select(statement , map, new ResultHandler() {
		 @Override
		 public void handleResult(ResultContext resultContext) {
			 Object obj = resultContext.getResultObject();
			 Map map = (HashMap) obj;
			 Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
			 Row row = sh.createRow(INIT_ROW_NUM++);
			 int j=0;
			 while (entries.hasNext()) {
				Map.Entry entry = entries.next();
				 Cell cell = row.createCell(j++);
				 if (INIT_ROW_NUM == 1) {
					 cell.setCellValue(entry.getKey().toString());
				 } else {
					 cell.setCellValue((String)entry.getValue().toString());
				 }
			 }
		 }
	 });
FileOutputStream out = new FileOutputStream(filePath);
 wb.write(out);
 out.close();
  wb.dispose();
INIT_ROW_NUM =0;

 

分享到:
评论

相关推荐

    ORACLE导出到EXCEL

    有时,我们需要将Oracle数据库中的数据导出到Excel文件,以便进行进一步的处理或分析。本文将详细介绍如何利用Java编程语言,结合JXL库来实现这一过程,特别是处理BLOB类型的文件。 首先,理解BLOB类型。BLOB...

    java 大数据导出csv小工具

    标题中的“java 大数据导出csv小工具”指的是一个基于Java编程语言开发的应用程序,其主要功能是将大量数据转换并导出为CSV(逗号分隔值)格式的文件。CSV是一种通用的文件格式,广泛用于数据交换,因为它可以被...

    java excel大数据量导出demo,可支持模板导出

    这可能涉及到数据库的分页查询,然后逐页导出到Excel。在Java中,这可以通过JDBC或者ORM框架如Hibernate、MyBatis来实现。 3. **数据处理**:在导出前,可能需要对数据进行预处理,比如格式转换、计算、过滤等。这...

    JAVA导出数据到excel中大数据量的解决方法

    web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在导出时,根据最大行数重新建立新的excel文件; 数据从数据库取出使用纯jdbc方式读数据,边读边向文件中写; 待所有数据写完,将各个小excel...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成excel,将excle表里面的数据保存到数据库.zip

    本项目是关于如何利用EasyExcel与MySQL数据库配合,实现数据的导出生成Excel文件,以及将Excel中的数据保存到数据库的操作。 首先,EasyExcel是阿里巴巴开源的一款轻量级的Java处理Excel工具,它支持读取和写入...

    Java ResultSet导出大数据.docx

    在Java开发中,处理大数据时常常面临内存溢出的问题,尤其是在需要将大量数据库数据导出到文件,如...通过上述策略,可以更有效地处理大数据导出,避免Java应用因内存溢出而崩溃,同时提高数据处理的效率和稳定性。

    java读取excel所需jar包(xlsx导出并附带其他数据库连接基本jar包)

    通过以上分析,我们可以了解到这个资源主要涉及了使用Java和Apache POI处理xlsx文件,特别是大数据批量导出的场景,同时还提供了数据库连接的支持。开发者可以根据具体需求,结合`ExportExcels.java`中的示例代码和...

    Java ResultSet导出大数据.pdf

    在导出大量数据到文件,如Excel或CSV格式时,需要采取特定策略以优化内存使用。以下是一些关键知识点和最佳实践: 1. **数据库分页**: 对于大规模数据导出,通常采用分页查询来减少一次性加载的数据量。Oracle...

    导入Excel到MySQL通用工具(Java)源码

    在IT行业中,数据管理和操作是至关重要的任务,尤其是在大数据时代,高效的数据导入和导出工具是必不可少的。这里我们关注的是一个特定的Java项目——"导入Excel到MySQL通用工具",它提供了一种方法来将Excel文件...

    数据导出

    在Java环境中,我们可以使用Apache POI库来处理Excel文件,或者使用JDBC连接数据库进行数据导出。例如: ```java import org.apache.poi.ss.usermodel.WorkbookFactory; import java.sql.Connection; import java....

    数据分页导入Excel

    数据分页导入Excel是一项在大数据处理中常见的任务,它涉及到如何高效地从数据库中提取大量数据并将其组织成Excel格式。在这个过程中,我们通常会利用Java的Apache POI库,这是一个强大的工具,允许开发者创建、修改...

    超级好用的excel连接oracle的插件

    4. **数据导入导出**:用户可以方便地将Excel数据导入Oracle,或者将数据库中的数据导出到Excel,进行进一步的分析和处理。 5. **数据可视化**:通过插件,用户可能还能创建图表和图形,以直观地展示从Oracle获取的...

    Excel导入数据库

    - 使用API:通过编程语言(如Python的pandas库,Java的JDBC API)读取Excel文件,然后逐条插入或批量插入到数据库中。 - 数据转换工具:如ETL(提取、转换、加载)工具,如Alteryx、Pentaho或Informatica,可自动...

    将excel的数据导入到数据库中

    在IT行业中,数据管理是一项关键任务,特别是在大数据时代,数据的导入、导出与整合是日常操作的一部分。本文将详细讲解如何将Excel数据导入到Oracle数据库中,以及在这个过程中涉及的关键技术点。 首先,Excel是一...

    基于Java教师工资管理设计与实现

    - 教师信息导出Excel:支持将教师信息导出为Excel格式,方便进行数据分析或备份。 - 教师工资管理:涵盖工资计算、发放记录和调整等功能,确保工资计算的公正透明。 - 工资统计:自动生成工资报表,包括月度、...

    Java在处理大数据的时候一些小技巧

    9. 利用中间文件:在处理大数据时,可以将数据写入临时文件,然后进行批量处理,避免一次性加载大量数据到内存。 总之,处理大数据的关键在于合理地利用资源,通过分解、压缩、并行化、游标管理等方式优化内存使用...

    POI设置EXCEL单元格格式为文本.docx

    在数据挖掘和大数据分析中,POI 提供了方便的方式来读取、写入和修改 Excel 数据,这在从数据库导出数据到 Excel 表格时非常有用。 在本文中,我们将探讨如何使用 POI 设置 Excel 单元格格式为文本,并从数据库生成...

    海量数据导入与导出MATLAB的有效方法.zip

    `readtable`和`readmatrix`是常用的两个工具,用于导入CSV、Excel等格式的数据。`readtable`适用于带有结构信息的数据,如列名和数据类型,而`readmatrix`则简化为只读取数值,适用于纯数值型数据。对于非常大的文件...

    动态数据库编程

    此外,将数据库数据导出到Excel是一种常见的需求,这在数据分析和报告生成时尤其有用。多数编程语言都有库或模块支持这种功能,比如Python的pandas库可以方便地将数据写入Excel格式。导出数据后,开发者可以利用...

    poi-3.8-20120326.jar 和 poi-excelant-3.8-20120326.jar

    4. **数据流处理**:为了处理大数据,POI提供了SXSSF(Streaming Usermodel API),它可以在内存有限的情况下处理大型Excel文件,通过写入磁盘进行临时存储。 5. **公式处理**:POI能够解析和计算Excel中的公式,这...

Global site tag (gtag.js) - Google Analytics