`
dilaomimi
  • 浏览: 11729 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

dom4j从数据读2W条数据写入文件时内存溢出

阅读更多
主要是报内存溢出,我把写的操作放在循环里面的话,就只能把子节点写进去,没有了头和根节点,如果最后把整个document写进去的话,就内存溢出了,请大侠们指点指点啊,小弟在此谢过了
以下是代码:

package hrsys.out;

import org.dom4j.*;
import org.dom4j.io.*;
import org.xml.sax.SAXException;

import hrsys.db.dbcon;
import hrsys.outdata.Friends;

import java.io.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.*;

public class FriendsViewByTableName
{

        private XMLWriter writer = null;
       
        //调用dom4j中的一个类来解决中文问题,在得到writer时把format传进去
        OutputFormat format = OutputFormat.createPrettyPrint();

        public  void viewData(Adm_chgtmp adm)
        {
        /** 指定XML编码 */
            format.setEncoding("GBK"); 
           
            String tableName = null;
            String columnName = null;
            String columnValue = null;
           
            Element friendElement = null;
            Element ageElement = null;
            Document document  = null;
            String sql = "";
            String sql1 = "";
           
            ResultSet rs = null;
            ResultSet rs1 = null;
            dbcon connect = null;
          
            String TMPID = adm.getTMPID();
            String TMPDESC = adm.getTMPDESC();
            String ALLROWS = adm.getALLROWS();
            String MARKISNEW = adm.getMARKISNEW();
        String DELETEON = adm.getDELETEON();
        String TMPDATA =adm.getTMPDATA();
            String ISNEW = adm.getISNEW();
        Timestamp LASTUPDATE = adm.getLASTUPDATE();
       
        List list = stringToken(TMPDATA);
        Iterator it  = list.iterator();
        try
        {
        document = DocumentHelper.createDocument();
       
        Element friendsElement = document.addElement("DATA");
       
        //document.setRootElement(friendsElement);
       
//         try {
// writer.processingInstruction("xml version=\"1.0\"", "encoding=\"GBK\"");
// } catch (SAXException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
        while(it.hasNext())
        {
        tableName = (String)it.next();
        sql ="select * from " + tableName +" where ISNEW = 1 ";
        sql1 = "select * from syscolumns where id=object_id('"+ tableName + "')" ;
        try{
        connect = new dbcon();                
                 rs = connect.executeQuery(sql);
                 rs1 = connect.executeQuery(sql1);
                 rs1.last();
                 int row = rs1.getRow();
                 String column[] = new String[row];
                 rs1.beforeFirst();
                
               
                System.out.println(row);
               
                while(rs1.next())
                     {
                for(int i=0;i<row;i++)
                     {
                column[i] = rs1.getString("name");
                rs1.next();
                     }
                     }
                
               
                
                      
                   while(rs.next())
                   {
                   friendElement = friendsElement.addElement(tableName);

                  for(int i = 0;i<column.length;i++)
                  {
                   columnName = column[i];
               
                   columnValue = rs.getString(columnName);
                   System.out.println("列名:"+columnName);
                   System.out.println("值:"+columnValue);
                   ageElement = friendElement.addElement(columnName);
                   ageElement.setText((columnValue+"").toString().trim());
                  }
                
//                   writer.write(friendElement);
//                   friendElement.clearContent();//释放这个Element的空间,不然会导致内存耗尽
                 //friendsElement.clearContent();
                   }
                   //writer.write(friendsElement);  

               } catch( SQLException e){
                   e.printStackTrace();
             
               } catch( Exception e){
                   e.printStackTrace();
         
               }
               finally
               {
                   try
                   {
                       if(rs!=null)
                       rs.close();             
                       if(rs1!=null)
                       rs1.close();
                       connect.closeConnect();
                   }
                   catch(SQLException e)
                   {
                       e.printStackTrace();
                     
                   }

               }
               writer = new XMLWriter(new FileWriter(new File("C:/exp/friend.xml"),true),format);
               writer.write(document);
                   System.out.println("创建文件成功");
       
        }
       
} catch (IOException e)
{
e.printStackTrace();
}
finally
             {
                     if(writer != null)
                     {
                             try
                             {
                                     writer.close();
                             }
                             catch(Exception err)
                             {
                                     err.printStackTrace();
                             }
                     }
             }
 
               
        }
        public List stringToken(String tableName)
        {
        List list = new ArrayList();
        StringTokenizer stok = new StringTokenizer(tableName,",");
        while(stok.hasMoreElements())
        {
        list.add(stok.nextToken());
        }
        return list;
        }
    
}


  


  
分享到:
评论

相关推荐

    dom4j文件很好

    3. **高性能**:DOM4J在内存占用和解析速度上表现优秀,尤其是在处理大型XML文件时,可以避免内存溢出问题。 4. **强大的XPath支持**:DOM4J内建了XPath支持,允许开发者通过XPath表达式快速定位XML节点,进行数据...

    dom4j基于事件流解析大XML的文件 示例

    2. **性能**:DOM4J不仅支持DOM解析,还支持SAX和STAX解析,后者在处理大型XML文件时能有效减少内存占用。 3. **内存效率**:SAX解析器采用事件驱动模型,只在需要时处理XML元素,避免了内存不足的问题。 4. **易用...

    poi3.9 poi3.10 poi3.15 dom4j综合jar包

    在处理Excel时,DOM4J可能用于构建或解析模板文件,将数据绑定到XML结构,然后利用POI将这些数据转换为Excel格式。此外,DOM4J还可以用于读取Excel文件中的元数据,如工作表信息、样式等。 4. **使用场景**:这些...

    java中通过DOM4J解析XML文件

    相较于DOM和JDOM,DOM4J在性能上更为优越,特别是在处理大型XML文档时,不会像DOM那样可能导致内存溢出。DOM4J采用了基于树的模型,允许开发者通过路径表达式方便地访问XML结构。然而,这种便利性也意味着它需要将...

    EasyExcel是一个快速、简洁、解决大文件内存溢出的java处理Excel工具 .rar

    EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。 EasyExcel简单的写入与读取 进入正题如何使用esayexcel写入和解析excel表格...

    java-poi-excel-导出20万条记录【源代码】

    本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量的Excel导出,避免内存溢出的问题。Apache POI是一个流行的开源Java API,用于读写Microsoft Office格式的文件,...

    XML和属性文件读取和写入

    XML(Extensible Markup Language)和属性文件(Properties File)是两种常见的数据存储格式,它们在软件开发中扮演着重要角色,特别是在配置管理、资源本地化和数据交换方面。本篇文章将详细探讨这两种文件的读取和...

    超大xml解析导入数据库、千万级别大数据导出到Excel。实现核心:高性能、分段、分页循环:读取-写入-清空内存。解.zip

    首先,对于超大XML文件的解析,XML是一种广泛使用的数据交换格式,但其体积大且结构复杂,直接一次性加载到内存中解析可能会导致内存溢出。因此,高效的解析策略是必要的。一种常用的方法是分段(SAX)解析,它以...

    java写入excel

    在Java操作Excel文件时,可能会出现内存溢出异常,特别是在处理大数据量时。解决这个问题可以使用以下方法: * 使用POI的SXSSF-API,这是一个基于Streaming的API,用于处理大数据量的Excel文件。 * 使用Java的垃圾...

    java操作xml增删改查.doc

    Java 操作 XML 文件主要包括四种方式:DOM、JDOM、DOM4J 和 SAX。每种方法都有其特定的优势和适用场景。 1. DOM (Document Object Model):DOM 是一种 W3C 标准,提供了一种将整个 XML 文档加载到内存中的模型,...

    Jdom.jar在JAVA中可以对XML文件进行操作,读取或者写入XML

    - JDOM不适用于处理非常大的XML文件,因为整个文档会被加载到内存中,可能导致内存溢出。 - 性能优化:在处理大量数据时,考虑使用SAX或StAX等事件驱动的解析器,它们按需处理XML,减少了内存消耗。 JDOM.jar是...

    SpringBoot2.7.9 + Vue2 基于easyexcel实现Excel大数据量的导入导出源码(免费下载)

    在现代企业级应用中,数据交换经常以Excel文件的形式进行,尤其在大数据量处理时,高效导入导出功能显得尤为重要。本项目结合了SpringBoot 2.7.9、Vue2以及Element UI库,利用阿里巴巴的开源组件EasyExcel,实现了对...

    java动态上传excle文件并导出数据.pdf

    - 文件大小限制:`file_size_limit`确保上传的文件不会过大,避免服务器内存溢出。 - 队列限制:`file_queue_limit`控制同时上传的文件数量,防止资源过度消耗。 - 参数验证:后端应验证文件类型,防止恶意文件...

    使用Poi读取大数据量excel的方法

    在处理大数据量Excel时,直接一次性加载所有数据可能导致内存溢出。因此,Apache POI提供了一种叫做SAX API(Streaming Usermodel API)的低内存占用方式,适用于读取大型Excel文件。与传统的DOM模型不同,SAX API不...

    报表技术POI导入导出复杂样式Excel和百万数据(Java代码).zip

    1. **性能优化**:利用SXSSF进行数据写入,控制内存使用,避免内存溢出。 2. **批处理**:将数据分批写入,减少单次操作的数据量。 3. **错误处理**:对可能出现的异常情况进行捕获和处理,如文件不存在、权限问题等...

    poi操作Excel

    - 内存管理:处理大量数据时,务必注意内存限制,尤其是使用HSSF时,因为它是基于流的,可能导致内存溢出。XSSF和SXSSF更适合大数据量操作。 - 性能优化:对于大文件,使用SXSSF的事件模型可以显著降低内存占用,...

    阿里EasyExcel导出案例

    这种方式使得在处理大数据量的Excel时,能够有效避免内存溢出问题,因为只在需要时读取和写入数据。 2. **安装与依赖** 要使用EasyExcel,首先需要在项目中添加对应的Maven或Gradle依赖。对于Maven,可以在pom.xml...

    poi3.9.rar

    6. **事件模型**:对于大型文件,POI提供了一种低内存消耗的事件模型(SXSSF),它允许按需读取或写入数据,而不是一次性加载整个文件到内存。 7. **模板处理**:开发者可以创建模板文件,然后用数据动态填充,生成...

    PHP文件处理的高级应用/PHP文件处理的高级应用

    在处理CSV、XML、JSON等结构化数据文件时,PHP提供了专门的处理函数。例如,`fgetcsv()`用于解析CSV文件,`DOMDocument`和`SimpleXMLElement`类可以处理XML文件,而`json_decode()`和`json_encode()`则用于JSON数据...

Global site tag (gtag.js) - Google Analytics