`
tokyo2006
  • 浏览: 32432 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
        从数据库中读取数据导入到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源代码

    标题提到的“vb批量将excel数据导入access以及批量将access数据库中的数据导入excel源代码”是解决这类问题的一种有效方案。下面将详细介绍这两个过程的关键知识点。 1. Excel数据导入Access: - **数据连接**:...

    数据库数据导入到excel中 jsp

    在标题为“数据库数据导入到excel中 jsp”的场景下,我们主要探讨的是如何利用Java Web技术,尤其是JSP(JavaServer Pages)来实现数据在数据库与Excel之间的交互。描述中提到的实例涵盖了两个方向:将Excel数据导入...

    数据库中数据导入到EXCEL和WORD中

    以上就是使用C++Builder将数据库中的数据导入Excel和Word的基本方法。这个过程涉及到的知识点包括C++Builder的Ole Automation接口使用、COM对象的生命周期管理以及Microsoft Office API的运用。通过这些技术,开发者...

    将Excel文件导入到数据库中或将数据库中文件导出Excel中

    以下将详细介绍如何将Excel文件导入到数据库中,以及如何将数据库中的数据导出到Excel中。 首先,将Excel文件导入数据库通常涉及到以下几个步骤: 1. 数据预处理:在Excel中整理数据,确保格式正确,无错误或缺失...

    C#将数据导入excel和Excel数据导入数据库

    本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...

    npoiDLLEXCEL导入到数据库数据表导入到EXCEL

    标题 "npoiDLLEXCEL导入到数据库数据表导入到EXCEL" 涉及到的主要技术是使用NPOI库处理Excel文件,并进行数据的导入与导出操作。NPOI是一个开源的.NET库,它允许开发人员在不依赖Microsoft Office的情况下读写Excel...

    SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...

    java实现Excel数据导入到数据库

    在Java编程环境中,将Excel数据导入到数据库以及将数据库数据导出到Excel是常见的数据处理需求。本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java ...

    vb.net将excel中的数据导入到数据库

    ### vb.net将excel中的数据导入到数据库 在日常工作中,我们经常会遇到需要将Excel文件中的数据导入到数据库的情况。例如,在进行数据分析、报表处理或数据迁移等任务时,这种需求尤为常见。本篇文章将详细介绍如何...

    excel导入数据到Oracle数据库

    本文将详细介绍如何将Excel数据导入到Oracle数据库的具体步骤。 #### 二、准备工作 1. **安装PL/SQL Developer**:首先需要安装PL/SQL Developer工具,这是一个功能强大的Oracle数据库开发工具,支持数据导入导出...

    Excel导入数据库and数据库数据导入Excel

    数据库数据导入Excel的操作则相对应。当需要将数据库中的查询结果展示在Excel中时,先要执行SQL查询获取数据,然后使用POI库创建新的Excel工作簿和工作表,再将查询结果写入到相应的工作表中。每行数据库记录可以...

    从Excel中读取数据导入到数据库中

    将Excel数据导入数据库可以方便地进行数据分析、报表生成和业务流程自动化。 在处理合并单元格时,Excel中的合并单元格可能会导致数据导入的复杂性。因为合并单元格破坏了表格的常规结构,使得同一列的数据在不同行...

    java将数据库的数据导入excel

    在Java编程领域,将数据库中的数据导入到Excel文件是一项常见的任务,这有助于数据分析、报告生成或者数据备份。本文将深入探讨如何使用Java实现这一功能,主要涉及以下知识点: 1. **Java连接数据库**:首先,我们...

    Java+MySQL+将数据导入到Excel中,Java将Excel中的数据导入到MySQL数据库中,

    本主题主要涉及如何使用Java通过Apache POI库操作Excel文件,并将数据导入到MySQL数据库中,以及反向操作,即从数据库中提取数据并导出到Excel。 首先,让我们深入了解一下Java中的Apache POI库。POI是Apache软件...

    excel表导入数据库 数据库导出excel(idea平台)

    在这个主题中,我们将深入探讨如何使用Java技术栈,特别是基于IDEA开发环境,来实现在JSP和Servlet中进行Excel与数据库之间的数据导入和导出。 首先,我们需要了解Java中用于处理Excel文件的库,如Apache POI。...

    java实现Excel数据导入到mysql数据库.zip

    本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...

    将大量数据从数据库导入到Excel文档

    我主要采用了JXLS和POI的第三方jar包,这几个程序实例,都是我参考各种资料,自己写的,都运行过,能把40万数据导入到Excel文件中,而且性能也挺好的,这几个是程序代码,我把这几个程序的文档总结也上传了,如果要...

    利用存储过程将Excel中数据导入到数据库表中

    本话题聚焦于如何通过存储过程将Excel中的数据高效地导入到数据库表中。存储过程是预编译的SQL语句集合,能够提高执行效率,同时提供更好的安全性和可维护性。在这个过程中,我们通常会使用编程语言与数据库进行交互...

    C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中

    ### C#将SQL数据库中数据导入Excel中及反向操作详解 #### 一、引言 在实际的软件开发过程中,经常会遇到需要处理不同格式数据的情况。例如,将数据库中的数据导出为Excel文件,或者将Excel文件中的数据导入到数据库...

Global site tag (gtag.js) - Google Analytics