【菜鳥學Java】9:使用dom4j解析jdbc.xml
最開始的時候,程式中需要運算元據庫了,我們會把連線資料庫的JDBC程式碼寫到我們的業務邏輯程式碼裡面,這樣,每連線一次,就要寫一遍JDBC連線-關閉的程式碼,這樣的寫法顯然是很糟糕的,一旦資料庫有所變更,那麼你將要修改你的程式中所有使用JDBC的程式塊,一個一個的改固然讓人抓狂,批量替換也不是什麼好辦法。
因此我們就開始了抽象和封裝,將連線資料庫的程式碼抽取出來,寫成一個工具類,專門負責維護JDBC的連線資訊,然後在我們要連線資料庫的地方引用這個JDBC工具類,即可完成資料庫的連線,進而運算元據庫的表和資料。那麼問題又來了,如果要更換資料庫,那麼依然要修改JDBC工具類,並且重新編譯,才可以完成資料庫的切換,這個也不是很高明的辦法。
最後我們想出了使用XML配置檔案,來維護JDBC的連線資訊,這樣只要在JDBC工具類裡面讀取配置檔案的內容即可。而配置檔案是支援熱部署的,就是可以在不動任何程式程式碼的情況下,更換和修改資料庫的連線資訊,這樣做是不是更爽呢?那麼問題又來了,怎麼讀取配置檔案呢?請接著往下看。
想要解析XML,大致有四種方式:DOM、JDOM、SAX以及我們馬上要使用的DOM4J。
關於他們的介紹和比較,在本文就不再詳細說明了,大家可以自己找資料進行學習。下面我就來程式碼實戰,說說怎麼使用dom4j解析xml。
首先要準備一個jdbc的配置檔案jdbc.xml,如下所示:
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@localhost:1521:Databasename</url>
<user-name>username</user-name>
<password>password</password>
</db-info>
</config></span>
然後再準備一個實體類JdbcConfig.java,用於方便的操作解析出來的jdbc配置資訊,如下:
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 + "}";
}
}
之後就要寫XML的解析器了,在使用dom4j之前當然要先引入jar包了,如下圖所示,jar包自己可以去網上下載:
解析器XmlConfigReader.java的程式碼如下;
/**
* 採用單例模式解析xml檔案
* @author ljw
*
*/
public class XmlConfigReader {
//懶漢式(延遲載入lazy)
private static XmlConfigReader instance = null;
//儲存jdbc相關配置資訊
private JdbcConfig jdbcConfig = new JdbcConfig();
private XmlConfigReader() {
SAXReader reader = new SAXReader();
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.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");
//設定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相關配置
* @return
*/
public JdbcConfig getJdbcConfig() {
return jdbcConfig;
}
public static void main(String[] args) {
JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
System.out.println(jdbcConfig);
}
}
最後,在JDBC工具類中使用XmlConfigReader物件獲取JDBC的配置資訊了,程式碼如下
public class DbUtil {
/**
* 取得Connection
* @return
*/
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 main(String[] args) {
System.out.println(DbUtil.getConnection());
}
}
小結一下:
DOM4J 是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體。如今你可以看到越來越多的 Java 軟體都在使用 DOM4J 來讀寫 XML,特別是連 Sun 的 JAXM 也在用 DOM4J,還有大名鼎鼎的Hibernate也用它來讀取XML配置檔案。相關文章
- 菜鳥學Java(八)——dom4j詳解之讀取XML檔案JavaXML
- 菜鳥學Java(十七)——Jboss瘦身Java
- 菜鳥學Java(十八)——異常Java
- java內部類解析——菜鳥摘記Java
- 菜鳥提問:如何用java解析htmlJavaHTML
- 菜鳥也想學習JSON解析JSON
- python菜鳥教程學習9:函式Python函式
- 菜鳥學Java(十六)——Jboss簡介Java
- 菜鳥學Java(十一)——GET與POSTJava
- 【菜鳥學Java】11:Session技術JavaSession
- 【菜鳥學Java】10:Cookie技術JavaCookie
- 【菜鳥學Java】4:Servlet 技術JavaServlet
- 菜鳥學Java(十四)——Java反射機制(一)Java反射
- 菜鳥學Java(十五)——Java反射機制(二)Java反射
- 菜鳥學Java(九)——Servlet的基本配置JavaServlet
- 菜鳥學Java(十)——分頁查詢Java
- java菜鳥入門Java
- 菜鳥學Java(四)——JSP內建物件JavaJS物件
- 菜鳥學Java(二十三)——Java記憶體分析Java記憶體
- dom4j 學習 -- 封裝dom4j工具類+如何使用dom4j解析封裝
- 【菜鳥學Java】14:使用ThreadLocal對Connection進行封裝Javathread封裝
- 【菜鳥學Java】7:JSP的基本語法JavaJS
- 【菜鳥學Java】2:初識J2EEJava
- 菜鳥初學Java的備忘錄(二) (轉)Java
- 菜鳥初學Java的備忘錄(五) (轉)Java
- 菜鳥初學Java的備忘錄(八) (轉)Java
- 菜鳥初學Java的備忘錄(七) (轉)Java
- 菜鳥初學Java的備忘錄(九) (轉)Java
- 菜鳥初學Java的備忘錄(四) (轉)Java
- 菜鳥初學Java的備忘錄(六) (轉)Java
- 菜鳥初學Java的備忘錄(十) (轉)Java
- 菜鳥初學Java的備忘錄(一) (轉)Java
- 菜鳥初學Java的備忘錄(三) (轉)Java
- IT菜鳥的學習生活
- 菜鳥學Java(六)——簡單驗證碼生成(Java版)Java
- Java菜鳥到大牛學習路線培訓教程Java
- 【菜鳥學Java】6:JSP的基本原理JavaJS
- 菜鳥學Java(二十二)——重新認識泛型Java泛型