通過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。但無論如何,還是那句話:適合自己的纔是最好的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章