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

dom4j写入海量数据问题

阅读更多
主要是报内存溢出,我把写的操作放在循环里面的话,就只能把子节点写进去,没有了头和根节点,如果最后把整个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 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在...

    dom4j-2.1.3.zip

    同时,DOM4J还提供了`Writer`接口,可以将XML文档写入文件或流,实现XML数据的持久化。 总结来说,DOM4J 2.1.3是一个强大且易用的XML处理工具,它的API文档和源代码为开发者提供了便利的学习和开发环境。无论你是...

    dom4j_dom4j1.6.1安装包_

    在实际开发中,DOM4J常用于读取配置文件、解析XML格式的数据交换,或者与Web服务交互。由于其优秀的性能和丰富的功能,DOM4J 1.6.1版本至今仍被许多开发者所采用,特别是在那些需要高效处理XML的项目中。 总之,DOM...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    1. 支持XPath:DOM4J提供了一种强大的方式来查询XML文档,通过XPath表达式可以轻松地找到需要的数据。 2. 文档对象模型:它允许开发者以面向对象的方式处理XML文档,包括元素、属性、文本节点等。 3. 轻量级:DOM4J...

    dom4j dom4j dom4j dom4j

    在实际开发中,DOM4J常用于XML配置文件的读取、XML数据的交换、XML文件的生成等场景。例如,在Web服务开发中,它可以用来解析WSDL文件;在Spring框架中,用于读取和处理配置文件;在数据持久化领域,如Hibernate,它...

    dom4j-2.0.3.zip

    《深入解析DOM4J——基于Java的XML处理框架》 ...通过阅读DOM4J的API文档(如`dom4j-2.0.3-javadoc.jar`),结合源码学习(`dom4j-2.0.3-sources.jar`),可以深入理解其实现原理并更好地利用它来解决实际问题。

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    标题提及的"dom4j_1.6.1.jar"和"dom4j_2.1.0.jar"是两个不同版本的DOM4J库的Java档案文件,DOM4J是一个非常流行的Java XML API,用于处理XML文档。这两个版本的差异在于功能、性能优化和可能存在的bug修复。描述中...

    dom4j所依赖的所有jar包

    DOM4J则是基于DOM的一种轻量级API,它弥补了DOM的一些不足,比如性能问题和内存消耗。DOM4J通过提供SAX(Simple API for XML)和DOM的接口,使开发者可以选择更适合他们应用场景的方法来处理XML。 在DOM4J 1.6.1中...

    dom4j dom4j1.6 dom4j最新版

    在实际开发中,DOM4J常用于XML配置文件的读取、XML数据的交换、XML Web服务的客户端和服务端等场景。例如,在Spring框架中,DOM4J被用于解析配置文件,构建Bean的定义。通过理解并熟练使用DOM4J,开发者可以更高效地...

    dom4j 2.1.1

    XML(eXtensible Markup Language)作为一种结构化数据格式,在网络应用、配置文件、数据交换等方面广泛应用,DOM4J作为其解析工具,为开发者提供了便利。 DOM4J的主要特点包括: 1. 易于使用:DOM4J的API设计直观...

    dom4j 解析(读取) xml 节点数据

    在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...

    利用DOM4J解析SOAP的简单示例

    DOM4J是一个强大的Java库,用于处理XML文档,包括读取、写入、修改和解析。本篇文章将深入探讨如何利用DOM4J解析SOAP消息中的元素,以便在实际项目中进行有效的数据提取和操作。 首先,理解SOAP消息的结构至关重要...

    所有版本的dom4j工具包

    标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...

    org.dom4j.jar

    当我们遇到“java.lang.ClassNotFoundException: org.dom4j.DocumentException”的错误提示时,这通常意味着系统中缺少了DOM4j库,只需将“org.dom4j.jar”添加到项目类路径中即可解决此问题。 DOM4J是基于DOM和SAX...

    dom4j需要的包

    6. **性能优化**:DOM4J提供了缓存机制和性能优化策略,以提高处理大量XML数据时的效率。 7. **文档处理API**:DOM4J的API设计得非常直观,例如Element接口提供了添加子元素、删除元素、查找元素、获取属性值等方法...

    dom4j所需要的包和依赖包

    - **数据交换**:XML常用于不同系统间的数据交换,DOM4J可以方便地处理这些数据。 - **配置文件处理**:许多应用使用XML作为配置文件,DOM4J可以轻松解析和修改这些配置。 - **Web服务**:在SOAP等Web服务中,XML...

    DOM4J帮助文档及使用教程

    通过阅读和实践DOM4J的帮助文档和使用教程,开发者可以全面掌握DOM4J的各种特性和用法,从而更高效地处理XML数据。这个压缩包提供的资料全面且详细,对于想要深入理解DOM4J的Java开发人员来说,是一份非常宝贵的资源...

Global site tag (gtag.js) - Google Analytics