主要是报内存溢出,我把写的操作放在循环里面的话,就只能把子节点写进去,没有了头和根节点,如果最后把整个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;
}
}
分享到:
相关推荐
3. **高性能**:DOM4J在内存占用和解析速度上表现优秀,尤其是在处理大型XML文件时,可以避免内存溢出问题。 4. **强大的XPath支持**:DOM4J内建了XPath支持,允许开发者通过XPath表达式快速定位XML节点,进行数据...
2. **性能**:DOM4J不仅支持DOM解析,还支持SAX和STAX解析,后者在处理大型XML文件时能有效减少内存占用。 3. **内存效率**:SAX解析器采用事件驱动模型,只在需要时处理XML元素,避免了内存不足的问题。 4. **易用...
在处理Excel时,DOM4J可能用于构建或解析模板文件,将数据绑定到XML结构,然后利用POI将这些数据转换为Excel格式。此外,DOM4J还可以用于读取Excel文件中的元数据,如工作表信息、样式等。 4. **使用场景**:这些...
相较于DOM和JDOM,DOM4J在性能上更为优越,特别是在处理大型XML文档时,不会像DOM那样可能导致内存溢出。DOM4J采用了基于树的模型,允许开发者通过路径表达式方便地访问XML结构。然而,这种便利性也意味着它需要将...
EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。 EasyExcel简单的写入与读取 进入正题如何使用esayexcel写入和解析excel表格...
本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量的Excel导出,避免内存溢出的问题。Apache POI是一个流行的开源Java API,用于读写Microsoft Office格式的文件,...
XML(Extensible Markup Language)和属性文件(Properties File)是两种常见的数据存储格式,它们在软件开发中扮演着重要角色,特别是在配置管理、资源本地化和数据交换方面。本篇文章将详细探讨这两种文件的读取和...
首先,对于超大XML文件的解析,XML是一种广泛使用的数据交换格式,但其体积大且结构复杂,直接一次性加载到内存中解析可能会导致内存溢出。因此,高效的解析策略是必要的。一种常用的方法是分段(SAX)解析,它以...
在Java操作Excel文件时,可能会出现内存溢出异常,特别是在处理大数据量时。解决这个问题可以使用以下方法: * 使用POI的SXSSF-API,这是一个基于Streaming的API,用于处理大数据量的Excel文件。 * 使用Java的垃圾...
Java 操作 XML 文件主要包括四种方式:DOM、JDOM、DOM4J 和 SAX。每种方法都有其特定的优势和适用场景。 1. DOM (Document Object Model):DOM 是一种 W3C 标准,提供了一种将整个 XML 文档加载到内存中的模型,...
- JDOM不适用于处理非常大的XML文件,因为整个文档会被加载到内存中,可能导致内存溢出。 - 性能优化:在处理大量数据时,考虑使用SAX或StAX等事件驱动的解析器,它们按需处理XML,减少了内存消耗。 JDOM.jar是...
在现代企业级应用中,数据交换经常以Excel文件的形式进行,尤其在大数据量处理时,高效导入导出功能显得尤为重要。本项目结合了SpringBoot 2.7.9、Vue2以及Element UI库,利用阿里巴巴的开源组件EasyExcel,实现了对...
- 文件大小限制:`file_size_limit`确保上传的文件不会过大,避免服务器内存溢出。 - 队列限制:`file_queue_limit`控制同时上传的文件数量,防止资源过度消耗。 - 参数验证:后端应验证文件类型,防止恶意文件...
在处理大数据量Excel时,直接一次性加载所有数据可能导致内存溢出。因此,Apache POI提供了一种叫做SAX API(Streaming Usermodel API)的低内存占用方式,适用于读取大型Excel文件。与传统的DOM模型不同,SAX API不...
1. **性能优化**:利用SXSSF进行数据写入,控制内存使用,避免内存溢出。 2. **批处理**:将数据分批写入,减少单次操作的数据量。 3. **错误处理**:对可能出现的异常情况进行捕获和处理,如文件不存在、权限问题等...
- 内存管理:处理大量数据时,务必注意内存限制,尤其是使用HSSF时,因为它是基于流的,可能导致内存溢出。XSSF和SXSSF更适合大数据量操作。 - 性能优化:对于大文件,使用SXSSF的事件模型可以显著降低内存占用,...
这种方式使得在处理大数据量的Excel时,能够有效避免内存溢出问题,因为只在需要时读取和写入数据。 2. **安装与依赖** 要使用EasyExcel,首先需要在项目中添加对应的Maven或Gradle依赖。对于Maven,可以在pom.xml...
6. **事件模型**:对于大型文件,POI提供了一种低内存消耗的事件模型(SXSSF),它允许按需读取或写入数据,而不是一次性加载整个文件到内存。 7. **模板处理**:开发者可以创建模板文件,然后用数据动态填充,生成...
在处理CSV、XML、JSON等结构化数据文件时,PHP提供了专门的处理函数。例如,`fgetcsv()`用于解析CSV文件,`DOMDocument`和`SimpleXMLElement`类可以处理XML文件,而`json_decode()`和`json_encode()`则用于JSON数据...