从数据库中读取数据导入到excel中,如果数据量小,的确很简单,直接用POI输出就OK了,可是我这边有>6W的数据要输出,java运行了直接溢出了,于是前辈给了个取巧的办法,调用java命令并设置vm参数-Xms1024M -Xmx1024M,呵呵,这样很大了,那么下面就是着手运行这个命令就行了,首先把这个导出的方法写在要调用的类的main方法中,然后在我的网站应用的Action中去执行一个命令脚本,windows下用bat,linux下用sh,由于要执行脚本,在linux下要注意就是要把你的应用读写权限打开。那么先从调用的命令开始
1.设置好参数,就是main中的String[] args参数比如输出excel的路径
String excelPath = Struts2Utils.getSession().getServletContext().getRealPath("/upload/doc/export.xls");
2.生成好bat或者是sh文件
String osName = System.getProperty("os.name");//获取操作系统
if (osName.toLowerCase().indexOf("windows") != -1) {
filePath = Struts2Utils.getSession().getServletContext().getRealPath("/WEB-INF/classes/excelDb.bat");
}
else
{
filePath = Struts2Utils.getSession().getServletContext().getRealPath("/WEB-INF/classes/excelDb.sh");
}
String cmdLine ="";
cmdLine+="cd "+classPath+" \r\n";
cmdLine+=" java -Xms1024M -Xmx1024M -Djava.ext.dirs="+dirPath+" com.twc.common.utils.command.Command "+excelPath;
try {
FileUtils.writeFile(new File(filePath), cmdLine.getBytes());//生成文件
} catch (IOException e1) {
e1.printStackTrace();
}
3.调用这个bat或者是sh文件
Process proc = null;
try {
String result = "";
proc = Runtime.getRuntime().exec(filePath);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while ((result = bufferedReader.readLine()) != null)
System.out.println(result);
if(proc.waitFor() != 0) {
logger.error("Can't execute: " + cmdLine);
}
if(error.length() > 0) {
logger.warn(error);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
proc.destroy();
proc = null;
}
这样Action的使命就完成了,那么接下来就是实现调用类的导出excel方法了(我的调用类是Command类)下面的方法是main中的,我截取了最重要的出来
1 List<Vector> result = new ArrayList<Vector>();
2 dba.open();
3 try {
4
5 String sql = sb.toString();
6 String[] arrFields = fields.split(",");
7 int size = arrFields.length;
8 dba.query(sql);
9 while (dba.rs != null && dba.rs.next()) {
10
11 Vector cell = new Vector();
12 for(int i=1;i<size+1;i++)
13 {
14 cell.add(dba.rs.getString(i));
15 }
16 result.add(cell);
17 }//从数据库的到数据存放在result中
18 } catch (SQLException e) {
19
20 }
21 PoiUtils e = new PoiUtils(excelPath);
22 int cnt=1;
23 int size = result.size();
24 int block = size/Command.BLOCK;
25 if(block<1)//判断数据是否超出excel极限(excel的一个sheet最多存放6w多行数据)
26 {
27 //直接把所有数据输出到一个sheet中去
28 e.createSheet(0);
29 e.createRow(0);
30 for(int j=0;j<arrField.length;j++)
31 {
32
33 e.setCell(j, arrField[j]);
34
35 }
36 for(int l=1;l<size+1;l++)
37 { e.createRow(l);
38 for(int j=0;j<arrField.length;j++)
39 {
40 if(result.get(l-1).get(j)!=null)
41 {
42 e.setCell(j, result.get(l-1).get(j).toString());
43 }
44 else
45 {
46 e.setCell(j, "");
47 }
48 }
49 }
50 }
51 else
52 {
53 //如果超出了范围则把数据分别输出到k个sheet中去
54 for(int k=0;k<block;k++)
55 {
56 //第k+1个sheet
57 e.createSheet(k+1);
58 //数据字段名
59 e.createRow(0);
60 for(int j=0;j<arrField.length;j++)
61 {
62
63 e.setCell(j, arrField[j]);
64
65 }
66 int start = k*Command.BLOCK;
67 int end = Command.BLOCK*(k+1);
68 for(int l=start;l<end;l++) //输出到excel中
69 {
70 e.createRow(cnt);
71 cnt++;
72 if(cnt==Command.BLOCK+1)cnt = 1;
73 for(int j=0;j<arrField.length;j++)
74 {
75 if(result.get(l).get(j)!=null)
76 {
77 e.setCell(j, result.get(l).get(j).toString());
78 }
79 else
80 {
81 e.setCell(j, "");
82 }
83 }
84 }
85 }
86 }
87
88 try {
89 e.exportXLS();//输出结果
90 System.out.println("Exprot Success!");
91 } catch (XLSException e1) {
92
93 }
分享到:
相关推荐
标题提到的“vb批量将excel数据导入access以及批量将access数据库中的数据导入excel源代码”是解决这类问题的一种有效方案。下面将详细介绍这两个过程的关键知识点。 1. Excel数据导入Access: - **数据连接**:...
在标题为“数据库数据导入到excel中 jsp”的场景下,我们主要探讨的是如何利用Java Web技术,尤其是JSP(JavaServer Pages)来实现数据在数据库与Excel之间的交互。描述中提到的实例涵盖了两个方向:将Excel数据导入...
以上就是使用C++Builder将数据库中的数据导入Excel和Word的基本方法。这个过程涉及到的知识点包括C++Builder的Ole Automation接口使用、COM对象的生命周期管理以及Microsoft Office API的运用。通过这些技术,开发者...
以下将详细介绍如何将Excel文件导入到数据库中,以及如何将数据库中的数据导出到Excel中。 首先,将Excel文件导入数据库通常涉及到以下几个步骤: 1. 数据预处理:在Excel中整理数据,确保格式正确,无错误或缺失...
本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...
标题 "npoiDLLEXCEL导入到数据库数据表导入到EXCEL" 涉及到的主要技术是使用NPOI库处理Excel文件,并进行数据的导入与导出操作。NPOI是一个开源的.NET库,它允许开发人员在不依赖Microsoft Office的情况下读写Excel...
在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...
在Java编程环境中,将Excel数据导入到数据库以及将数据库数据导出到Excel是常见的数据处理需求。本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java ...
### vb.net将excel中的数据导入到数据库 在日常工作中,我们经常会遇到需要将Excel文件中的数据导入到数据库的情况。例如,在进行数据分析、报表处理或数据迁移等任务时,这种需求尤为常见。本篇文章将详细介绍如何...
本文将详细介绍如何将Excel数据导入到Oracle数据库的具体步骤。 #### 二、准备工作 1. **安装PL/SQL Developer**:首先需要安装PL/SQL Developer工具,这是一个功能强大的Oracle数据库开发工具,支持数据导入导出...
数据库数据导入Excel的操作则相对应。当需要将数据库中的查询结果展示在Excel中时,先要执行SQL查询获取数据,然后使用POI库创建新的Excel工作簿和工作表,再将查询结果写入到相应的工作表中。每行数据库记录可以...
将Excel数据导入数据库可以方便地进行数据分析、报表生成和业务流程自动化。 在处理合并单元格时,Excel中的合并单元格可能会导致数据导入的复杂性。因为合并单元格破坏了表格的常规结构,使得同一列的数据在不同行...
在Java编程领域,将数据库中的数据导入到Excel文件是一项常见的任务,这有助于数据分析、报告生成或者数据备份。本文将深入探讨如何使用Java实现这一功能,主要涉及以下知识点: 1. **Java连接数据库**:首先,我们...
本主题主要涉及如何使用Java通过Apache POI库操作Excel文件,并将数据导入到MySQL数据库中,以及反向操作,即从数据库中提取数据并导出到Excel。 首先,让我们深入了解一下Java中的Apache POI库。POI是Apache软件...
在这个主题中,我们将深入探讨如何使用Java技术栈,特别是基于IDEA开发环境,来实现在JSP和Servlet中进行Excel与数据库之间的数据导入和导出。 首先,我们需要了解Java中用于处理Excel文件的库,如Apache POI。...
本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...
我主要采用了JXLS和POI的第三方jar包,这几个程序实例,都是我参考各种资料,自己写的,都运行过,能把40万数据导入到Excel文件中,而且性能也挺好的,这几个是程序代码,我把这几个程序的文档总结也上传了,如果要...
本话题聚焦于如何通过存储过程将Excel中的数据高效地导入到数据库表中。存储过程是预编译的SQL语句集合,能够提高执行效率,同时提供更好的安全性和可维护性。在这个过程中,我们通常会使用编程语言与数据库进行交互...
### C#将SQL数据库中数据导入Excel中及反向操作详解 #### 一、引言 在实际的软件开发过程中,经常会遇到需要处理不同格式数据的情况。例如,将数据库中的数据导出为Excel文件,或者将Excel文件中的数据导入到数据库...