我是一个新手。java如何实现把数据库里的数据写入到xml? 请高手们指点。我在网上找了一些资料,好像有 dom, jdom, sax, dom4j等技术支持解析xml的。有人说dom4j好用。我自己也试着写了一段代码。往xml里写入到20000多一点的数据,java.lang.OutOfMemoryError 错误。 这是我把数据导入到xml文件的代码。 public String writeXML(String fileName, ResultSet rs) {
int count = 0;
String str = "";
try{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("d:\\pcis\\"+fileName+".xml"));
Element rootElement = document.getRootElement();
Writer out = new FileWriter("d:\\pcis\\"+fileName+".xml");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
int ii = 1;
while (rs.next()) {
System.out.println(ii);
// Dom4jXMLHelp().maxXml(fileName) 判断文件大小
if(!new Dom4jXMLHelp().maxXml(fileName) || ii > 20000) {
str = "manle";
break;
}
Element elements = rootElement.addElement(rootElement.getName()+"_"+ii);
ResultSetMetaData rsmd = rs.getMetaData();
count = rsmd.getColumnCount();
for (int i = 1; i <= count; i++){
Element element = elements.addElement(rsmd.getColumnName(i));
element.addAttribute("DataType", rsmd.getColumnTypeName(i));
element.setText(rs.getObject(i) == null ? "" : rs.getObject(i).toString());
}
ii++;
}
String strDocument = document.toString();
System.out.println(strDocument);
writer.write(document);
writer.close();
str = "OK";
System.out.println(rs.isAfterLast()+":"+rs.next());
} catch(Exception e) {
e.printStackTrace();
return "shibai";
}
return str;
}
还有一点疑问就是执行 writer.write(document); 代码的时候 花费 4,5分钟。数据库表里的数据量不算少, 基本上是几百万条,最多的3000万+。这么算下来,一张表就要大概一周的时间。看了好多的帖子,都不知道怎么办了高手们请帮帮忙。
int count = 0;
String str = "";
try{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("d:\\pcis\\"+fileName+".xml"));
Element rootElement = document.getRootElement();
Writer out = new FileWriter("d:\\pcis\\"+fileName+".xml");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
int ii = 1;
while (rs.next()) {
System.out.println(ii);
// Dom4jXMLHelp().maxXml(fileName) 判断文件大小
if(!new Dom4jXMLHelp().maxXml(fileName) || ii > 20000) {
str = "manle";
break;
}
Element elements = rootElement.addElement(rootElement.getName()+"_"+ii);
ResultSetMetaData rsmd = rs.getMetaData();
count = rsmd.getColumnCount();
for (int i = 1; i <= count; i++){
Element element = elements.addElement(rsmd.getColumnName(i));
element.addAttribute("DataType", rsmd.getColumnTypeName(i));
element.setText(rs.getObject(i) == null ? "" : rs.getObject(i).toString());
}
ii++;
}
String strDocument = document.toString();
System.out.println(strDocument);
writer.write(document);
writer.close();
str = "OK";
System.out.println(rs.isAfterLast()+":"+rs.next());
} catch(Exception e) {
e.printStackTrace();
return "shibai";
}
return str;
}
还有一点疑问就是执行 writer.write(document); 代码的时候 花费 4,5分钟。数据库表里的数据量不算少, 基本上是几百万条,最多的3000万+。这么算下来,一张表就要大概一周的时间。看了好多的帖子,都不知道怎么办了高手们请帮帮忙。
解决方案 »
- hibernate utils类这样写可以么?
- 手机开发
- 在hibernate中,Session 是不是类似 HttpSession ?
- 说说您们的版本控制系统!!
- hibernate缓存问题?
- 奇怪,apache的POI不支持操作word?
- JBuiler下如何给ejb打jar包?
- Hibernate:这条简单的SQL改成HSQL该怎么写。多谢
- 一些琐碎的不过头痛的关于DATASOURCE和JNDI的问题请教,走过路过不要错过~~~~~~
- 运行一个简单helloworld出错
- java 执行shell“ls > /root/a.txt”出错“ls: /root/a.txt: No such file or directory”
- 来吧,各位大牛,帮我看看这样的数据表设计,说出你的想法,给出你的设计
有个思路,你看看,每 1k或者每 1w 条记录就保存 文件,然后再写到下一个文件中去,另外,你用 sax 来写吧,dom4j 好像是 sax 来读 xml样的