//*****************************************************************************************************************
package com;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* 获取Access数据库的连接
* @author 佛山无影脚
* @version 1.0
* Jul 7, 2008 4:35:49 PM
*/
public class AccessMDBUtil {
public static Connection connectMdb(String mdbName) {
if(mdbName == null || mdbName.equals("")){
return null;
}
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+mdbName;
Connection conn=DriverManager.getConnection(dburl);
return conn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
//*******************************************************************************************************************
//*******************************************************************************************************************
package com;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
/**
* 定制的事件处理器
* @author 佛山无影脚
* @version 1.0
* Jul 7, 2008 4:35:49 PM
*/
public class ManElementHandler implements ElementHandler {
public String mdbName;//数据库名称 含路径
public ManElementHandler(){
}
public ManElementHandler(String mdbName){
this.mdbName = mdbName;
}
/**
*将Element节点数据保存到数据库
*/
public boolean saveMan(Element element, String mdbName){
System.out.println(" the method saveMan in ManElementHandler is execute!");
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
conn= AccessMDBUtil.connectMdb(mdbName);
stmt=conn.createStatement();
String sql = "insert into mans(id,name) values(" + element.elementText("id") + ",'" + element.elementText("name") + "')";
stmt.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return true;
}
public void onEnd(ElementPath arg0) {
Element row = arg0.getCurrent();
Element rowSet = row.getParent();
Document document = row.getDocument();
Element root = document.getRootElement();
Iterator it = root.elementIterator();
while(it.hasNext()){
Element element = (Element)it.next();
System.out.println(" id : " + element.elementText("id") + " name : " + element.elementText("name"));
saveMan(element, this.mdbName);
}
row.detach();
}
public void onStart(ElementPath path) {
}
}
//*************************************************************************************************************************
//*************************************************************************************************************************
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
/**
* 测试
* @author 佛山无影脚
* @version 1.0
* Jul 7, 2008 4:35:49 PM
*/
public class ManTest {
/**
* 创建man节点
* <man><id>1</id><name>佛山无影脚</name></man>
* @param id
* @param name
* @return
*/
public Element createManElement(Long id,String name){
Element manElement = DocumentHelper.createElement("man");
manElement.addElement("id").addText(id.toString());
manElement.addElement("name").addText(name);
return manElement;
}
/**
* 数据写入xml文件
* @param filePath 目标xml文件的存放路径
* @return
*/
public boolean writeXML(String filePath){
XMLWriter out;
try {
/*
* 创建XMLWriter对象,设置XML编码,解决中文问题。
*/
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("GBK");
out = new XMLWriter(new FileWriter(filePath),outputFormat);
out.startDocument();
Element rootElement = DocumentHelper.createElement("mans");
out.writeOpen(rootElement);
/*
* 向mans节点写入子节点
*/
for(int i=0 ; i<1000000 ; i++){
Element man = this.createManElement(new Long(i), "shuhang"+i);
out.write(man);
System.out.println(" the loop index is : " + i);
}
out.writeClose(rootElement);
out.endDocument();
out.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (SAXException e) {
e.printStackTrace();
return false;
}
}
/**
* 从xml文件中读取数据,并将数据写入Access数据
* @param filePath xml文件的存放路径
* @return
*/
public boolean readXML(String filePath){
ManElementHandler manElementHandler = new ManElementHandler("F:\\dom4j\\xmlTest.mdb");
SAXReader reader = new SAXReader();
reader.addHandler( "/mans/man", manElementHandler);
Document document = null;
try {
File file = new File(filePath);
document = reader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args){
XMLReader reader = null;
long startTime = System.currentTimeMillis();
ManTest mantest = new ManTest();
mantest.writeXML("f:\\dom4j\\mans.xml");
mantest.readXML("f:\\dom4j\\mans.xml");
long endTime = System.currentTimeMillis();
System.out.println(" is end! the millis is : " + (endTime - startTime));
}
}
//*************************************************************************************************************************
相关推荐
在处理大文件时,DOM4J结合XPath的使用,可以有效地管理和分析大量数据。在这个场景下,描述提到的测试涉及到了50多万条数据的解析,这无疑是对DOM4J性能的一次挑战。 首先,我们来深入理解DOM4J的核心概念。DOM4J...
5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...
总结来说,这些文件共同展示了如何利用DOM4J库处理大文件,尤其是通过SAX解析和事件处理来避免内存溢出问题。在实际开发中,对于大文件的XML处理,使用这样的策略能够提高程序的稳定性和效率,同时减少对系统资源的...
6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在处理大型XML文件时节省内存。 7. **与JAXB集成**:DOM4J可以与Java Architecture for XML ...
在Java世界中,DOM4J是与DOM、SAX和JDOM等其他XML处理库并驾齐驱的一个选择,尤其在处理大型XML文件时,其性能和内存效率往往更胜一筹。 DOM4J的主要特点包括: 1. **丰富的API**:DOM4J提供了大量的接口和类,...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛...在Java开发中,根据XML文件的大小和处理需求,可以选择DOM4J以获得更好的性能和便利性。理解并熟练掌握这两种解析技术,对于处理XML数据至关重要。
本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...
在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、查询和修改变得更为简单。在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J...
DOM4j则是一个强大的Java库,用于处理XML文档,提供了丰富的API来实现XML的读取、写入、修改等操作。在这个示例中,我们将深入探讨如何利用Maven管理和DOM4j来操作XML文件。 首先,让我们了解一下Maven。Maven是...
这个列表只包含了一个条目"xml",可能意味着压缩包中包含的是与XML相关的文件或资源,可能是XML示例文件、测试用例或者与DOM4J处理XML相关的配置文件。 总结来说,DOM4J是一个强大的XML处理库,提供了丰富的API和...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的读取、创建、修改和解析变得简单易行。在本文中,我们将深入探讨DOM4J如何实现XML文件的读取和写入,并通过一个实际的`...
首先,DOM4J的核心在于其对DOM模型的优化,使得在处理大型XML文件时性能更优,内存占用更低。在"dom4j-2.1.3.jar"文件中,包含了DOM4J库的所有类和方法,可以用于构建、解析和操作XML文档。这个版本的DOM4J在前一...
4. **事件驱动解析:**除了DOM解析,DOM4J也支持SAX解析器,允许在处理大型XML文件时节省内存。 5. **流式处理:**DOM4J还支持StAX解析,适用于处理大量数据或需要低内存占用的情况。 6. **XML编组和解组:**DOM4J...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。DOM4J在Java社区中被广泛使用,尤其是在那些需要处理大量XML数据的应用中。这个压缩包包含了...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J 1.6是该库的一个较新版本,提供了完整的功能集以及对XML标准的广泛支持。 DOM4J的核心...
DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML数据。在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它...
通过研究其中的代码,你可以掌握DOM4J处理XML的基本技巧,并理解如何将其应用到实际的Java项目中,以实现XML文件的高效管理和操作。无论是新手还是有经验的开发者,都能从中受益匪浅,提升对XML处理的能力。