Home  >  Article  >  Database  >  【java项目实战】dom4j解析xml文件,连接Oracle数据库

【java项目实战】dom4j解析xml文件,连接Oracle数据库

WBOY
WBOYOriginal
2016-06-07 15:26:381185browse

简介 dom4j是由dom4j.org出品的一个开源XML解析包。这句话太官方,我们还是看一下官方给出的解释。如下图: dom4j是一个易于使用的、开源的,用于解析XML,XPath和XSLT等语言的库。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准

简介


       dom4j是由dom4j.org出品的一个开源XML解析包。这句话太官方,我们还是看一下官方给出的解释。如下图:

【java项目实战】dom4j解析xml文件,连接Oracle数据库

       

       dom4j是一个易于使用的、开源的,用于解析XML,XPath和XSLT等语言的库。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准。


特点


       dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了dom4j。


下载


        既然dom4j具有上面N多的优点,所以我们必须揭开dom4j的神秘面纱。使用dom4j开发,需下载dom4j相应的jar文件。


1.官网下载::http://www.dom4j.org/dom4j-1.6.1/

2.dom4j是sourceforge.net上的一个开源项目,因此可以到http://sourceforge.net/projects/dom4j下载其最新版


       打开dom4j-1.6.1的解压文件,我们可以看到有docs帮助的文件夹,也有dom4j解析xml文件的dom4j-1.6.1.jar文件。我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了。


实例


       下面我们使用dom4j读取系统配置文件,实现连接Oracle数据库的功能。在开始之前,将我们需要的jar构建到我们的项目中,例如:

1、将Oracle jdbc驱动拷贝到WEB-INF/lib下

2、将dom4j相关的jar拷贝到WEB-INF/lib下
   (1)dom4j-1.6.1.jar
   (2)jaxen-1.1-beta-6.jar(支持xpath相关的jar包

                      【java项目实战】dom4j解析xml文件,连接Oracle数据库


连接数据库类:DbUitl.java


package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class DbUtil {
	/**
	 * 取得Connection
	 * @return 
	 */
	public static Connection getConnection(){
		Connection conn=null;
		try {
			JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
			//获取oracle驱动的路径
			Class.forName(jdbcConfig.getDriverName());
			// String url = "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL";
			// 数据库连接,oracle代表连接的是oracle数据库;thin:@MyDbComputerNameOrIP代表的是数据库所在的IP地址(可以保留thin:);
			//1521代表连接数据库的端口号;ORCL代表的是数据库名称
			conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
						
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
		
	}
	
}

数据库配置文件:sys-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
	<db-info>
		<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
		<url>jdbc:oracle:thin:@localhost:1521:oracle</url>
		<user-name>drp1</user-name>
		<password>drp1</password>
	</db-info>
</config>

jdbc的配置信息:JdbcConfig.java


package util;
/**
 * jdbc配置信息
 * @author liang
 *
 */
public class JdbcConfig {

	

	private String driverName;
	
	private String url;
	
	private String userName;
	
	private String password;
	
	public String getDriverName() {
		return driverName;
	}

	public void setDriverName(String driverName) {
		this.driverName = driverName;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	
}

dom4j读取xml:XmlConfigReader.java


package util;

import java.io.InputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 采用单例解析sys-config.xml文件
 * @author liang
 *
 */
public class XmlConfigReader {

	//单例懒汉式(延迟加载lazy)
	//设置为空,使用在new,不用不new
	private static XmlConfigReader instance = null;
	
	//定义JdbcConfig成员变量,保存jdbc相关配置信息
	private JdbcConfig jdbcConfig = new JdbcConfig();;
	
	private XmlConfigReader(){
		//创建saxReader对象
		SAXReader reader = new SAXReader();
		//通过当前线程的类加载器,获得文件的相对路径,将xml文件读入到输入流
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
		try {
			 // 通过read方法读取xml文件, 转换成Document对象  
			Document doc = reader.read(in);
			
			//获得节点对象,取得jdbc相关的配置信息
			Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");	
			Element urlElt = (Element)doc.selectObject("/config/db-info/url");
			Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
			Element passwordElt = (Element)doc.selectObject("/config/db-info/password");
			
			//设置jdbc相关的配置
			jdbcConfig.setDriverName(driverNameElt.getStringValue());
			jdbcConfig.setUrl(urlElt.getStringValue());
			jdbcConfig.setUserName(userNameElt.getStringValue());
			jdbcConfig.setPassword(passwordElt.getStringValue());
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 加锁,实现多线程的同步机制,防止多线程的访问冲突
	 * @return
	 */
	public static synchronized XmlConfigReader getInstance(){
		if(instance == null){			
			instance = new XmlConfigReader();
		}
		return instance;
	}
	/**
	 * 返回jdbc的相关配置
	 * @return
	 */
	public JdbcConfig getJdbcConfig(){
		return jdbcConfig;
	}
}


解析:读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。

       其中,reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取,得到的Document对象就代表了整个XML。


dom4j解析xml的四步


1、以单例模式创建SAXReader对象

2、将xml文件读入到输入流中

3、read方法读取xml文件,转换成document对象

4、通过document对象取到xml文件的节点值


总结


       俗话说的好:站在巨人的肩膀上。dom4j就是巨人,能够清楚的认识dom4j,并会使用就ok了。



       支持源码下载:dom4j解析xml,连接oracle数据库



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn