通过dom4j读取xml实现数据库连接

    在我们大多数需要开发的软件中,我们无不需要连接到数据库,当然,有时候我们将这些链接信息放到类中,而更多时候我们都是放到xml文件中,今天我们就一起来学习一下怎样通过dom4j读取配置文件,进行连接数据库。

    dom4j是什么?这个我们要去查,百度的解释是:dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。

    说了一堆,一句话,其实就是在说它是一个API,用来读取xml文件。

    接下来我们就通过程序运行的顺序来看看,它是怎么连接到数据库的。


1.需要连接到的配置文件,sys-config.xml

<pre name="code" class="java"><pre name="code" class="html"><span style="font-family:KaiTi_GB2312;font-size:18px;"><config>
	<db-info>
		<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
		<url>jdbc:oracle:thin:@127.0.0.1:1521:myOracle</url>
		<user-name>jinbo</user-name>
		<password>123</password>
	</db-info>
</config></span>

 
 
 
 

2.数据库连接类:DbUtil类,从这个类我们调到了XmlConfigReader类。

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class DbUtil {

	/**
	 * 取得connection
	 */
	public static Connection getConnection(){
		
	Connection conn=null;
		
		try {
			JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig();
			Class.forName(jdbcConfig.getDriverName());
		 
		        conn=DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
		} catch (ClassNotFoundException e) {
 
			e.printStackTrace();
		} catch (SQLException e) {
 
			e.printStackTrace();
		}
		
		return conn;
	}
	
	public static  void close(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				 
				e.printStackTrace();
			}
			
		}
	}
  }</span>

3.XMLConfigReader类.

    这里我们用到了单例模式,并且我们知道单例模式分为两种饿汉式和懒汉式,用单例模式保证了我们只会实例化一个对象。

    并且单例模式有三个重点:

   a)静态的私有的成员变量

   b)私有的构造方法

   c)公共静态的入口点方法。

    并且这里我们用到了dom4j,读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。 从文件读取XML,输入文件名,返回XML文档,read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就代表了整个XML,然后再通过element拿到节点元素。

<span style="font-family:KaiTi_GB2312;font-size:18px;">/*
 * 采用单例模式解析sys-config.xml文件
 */
public class XmlConfigReader {
		
//	//饿汉式   上来就new  不管我们用不用,在内存中生成对象。(预先加载)
//	private static XmlConfigReader instance=new XmlConfigReader();
//	
//	private XmlConfigReader(){
//		
//		
//	}
//	
//	public static XmlConfigReader getInstance(){
//		
//		return instance;
//	}
	
	//懒汉式(延迟加载)
	private static XmlConfigReader instance=null;
	
	//保存jdbc相关配置
	private JdbcConfig jdbcConfig =new JdbcConfig();
	
	//私有构造方法
	@SuppressWarnings("unused")
	private XmlConfigReader(){
		SAXReader reader =new 	SAXReader();
	    InputStream in=	Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
	    try {
			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");
//			String dirverName=driverNameElt.getStringValue();
//			String url=driverNameElt.getStringValue();
//			String userName=driverNameElt.getStringValue();
//			
//			String password=driverNameElt.getStringValue();
			//设置jdbc相关配置
			jdbcConfig.setDriverName(driverNameElt.getStringValue());
			jdbcConfig.setUrl(urlElt.getStringValue());
			jdbcConfig.setUserName(userNameElt.getStringValue());
			jdbcConfig.setPassword(passwordElt.getStringValue());
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//公共静态入口方法    同步关键字
	public static synchronized XmlConfigReader getInstance(){
		//可能同时又很多人调用这个方法,不能保证单例的实现,所以需要判断保证
			if(instance==null){
				
				instance=new XmlConfigReader();
			}
			
			return instance;
		
	}
	
		/*
		 * 返回jdbc相关配置
		 */
		public JdbcConfig getJdbcConfig(){
			
			return jdbcConfig;
		}
	
 
		public static void main(String[ ] args){
			JdbcConfig jdbcConfig= XmlConfigReader.getInstance().getJdbcConfig();
			System.out.println(jdbcConfig);
		}
}</span>

4.jdbcconfig类,关于配置数据库的实体类。

<span style="font-family:KaiTi_GB2312;font-size:18px;">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;
	}
	
	@Override
	public String toString() {
		 return this.getClass().getName()+  "{driverName:"+driverName+",url:"+url+",userName:"+userName+"}";
	}
	
}
</span>

    这样,我们就读取到了配置文件,这样我们以后的维护会非常方便,只需要修改一下配置文件,而不用去类中修改。

    当然也不是一种读取配置文件的方式,还有JDOM,SAX等,如果XML文档较大且不考虑移植性问题建议采用DOM4J;如果XML文档较小则建议采用JDOM;如果需要及时处理而不需要保存数据则考虑SAX。但无论如何,还是那句话:适合自己的才是最好的

你可能感兴趣的:(通过dom4j读取xml实现数据库连接)