直接上代码:
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;
相关推荐
java使用jdbc将数据库数据导出到csv文件
这是一个JAVA的jdbc驱动包,可以帮助你想操作数据库一样快速操作excel 示例代码: public static void main(String[] vars){ String driver = "com.hxtt.sql.excel.ExcelDriver"; String url = "jdbc:excel:///C:\...
基于JDBC+JSP+Servlet的图书管理系统基于JDBC+JSP+Servlet的图书管理系统 基于JDBC+JSP+Servlet的图书管理系统基于JDBC+JSP+Servlet的图书管理系统 基于JDBC+JSP+Servlet的图书管理系统基于JDBC+JSP+Servlet的图书...
Java导出Excel,jxl 导出Excel 支持大数据量导出 导出数据量大
基于jdbc+jsp+servelet实现的图书管理系统基于jdbc+jsp+servelet实现的图书管理系统基于jdbc+jsp+servelet实现的图书管理系统基于jdbc+jsp+servelet实现的图书管理系统基于jdbc+jsp+servelet实现的图书管理系统基于...
JDBC导出所有表的Sql/Hibernate 导出所有表的Sql
JDBC-ODBC使用Excel作数据源
基于JDBC操作数据库的一些介绍和方法,掌握ibatis的基础哦,学好jdbc对于上手ibatis是必须的
利用JDBC解决大数据查询的问题
基于JDBC+MySQL+Servlet+JSP+Java实现简单校园论坛系统 基于JDBC+MySQL+Servlet+JSP+Java实现简单校园论坛系统 基于JDBC+MySQL+Servlet+JSP+Java实现简单校园论坛系统 基于JDBC+MySQL+Servlet+JSP+Java实现简单校园...
java 大数据导入工具类 jdbc 大数据导入数据库工具类 java
基于jdbc的图书管理系统,数据库用的是mysql,控制台进行输入输出。系统分成entity、dao、dao.impl、biz、biz.impl共5个包。关于数据库中表的设计请参看说明。如有疑问可以评论或联系我cyj-29@qq.com。
运用jdbc连接数据库,将数据库的表导出到excel中,将excel文件导入到数据库中,支持中文,可以进行导入前的数据修改。
使用jxl导出excel,包含项目和对应jar包和数据库文件,数据来源于数据库。
web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在...待所有数据写完,将各个小excel文件进行打包,输出到输出流中。 一小部分说明 见 http://blog.csdn.net/lisen1987/article/details/16857359
利用jdbc、poi把mysql查询的数据保存在本地的excel文件中,excel文件默认使用07版格式,支持数百万超大数据量的处理保存,内存占用极低,效率非常高,不会出现oom异常。代码已封装为java函数,mysql和poi相关jar包请...
Java实现数据库数据导出到excel,内有数据连接jar包,完整案例
本系统利用大数据技术,合理的为用户做出推荐,推荐的结果可靠程度很高,这就是我的优势所在,因为它和一般的推荐系统的推荐算法不太一样,我的推荐算法是利用Hadoop技术写的,我们可以利用Hadoop集群的高吞吐量,一...
可将oracle中表名 表注释 字段类型 字段长度 字段注释 导出为excel,生成的数据库表index sheet页面 可进行表sheet之间的跳转
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...基于jdbc+jsp+servlet+java 超市订单管理系统源码+数据库.zip