最后我們來修改DataBaseConnect類,首先我們定義幾個靜態變量:
private static Element coreModel; //根元素
private static String driver; //連接驅動
private static String url; //數據庫連接地址
private static String username; //用戶名
private static String password; //密碼
讀取DBConnect.xml文件,獲得根元素:
/**
* 加載數據源配置文件,取得根元素
*/
private static void load(){
SAXReader saxReader = new SAXReader();
//加載數據庫XML配置文件
InputStream in = ClassUtils.getResourceAsStream(Constant.DB_CONFIG);
try{
Document document = saxReader.read(in); //得到Document對象
coreModel = document.getRootElement(); //得到根元素
}catch(Exception e){
System.out.println("XML配置文件未加載成功,請檢查");
throw new RuntimeException(e);
}
}
將load方法靜態初始化:
static{
load();
}
通過XPATH路徑得到對應的元素:
/**
* 通過XPATH得到元素對象
* @param xPath XPATH路徑
* @return 獲得Element對象
*/
public static Element getElement(String xPath){
return (Element)coreModel.selectSingleNode(xPath);
}
再寫一個方法,讀取數據源配置信息,將之放入HashMap中:
/**
* 取得數據源配置信息放入HashMap中
* @param hashmap 存放取得的數據源鍵值對
* @return 返回存放信息的HashMap
*/
public static HashMap<String,String> iterateXML(HashMap<String,String> hashmap){
try{
Element database = getElement("//demo/database"); //得到database節點
List list = database.elements(); //得到database元素下的子元素集合
/*
* 循環遍歷集合中的每一個元素
* 將每一個元素的元素名和值作為鍵值對放入HashMap中
*/
for(Object obj:list){
Element element = (Element)obj;
//getName()是元素名,getText()是元素值
hashmap.put(element.getName(), element.getText());
}
}catch(Exception e){
e.printStackTrace();
}
return hashmap;
}
構造函數:
/**
* 構造函數初始化
*/
public DataBaseConnect(){
HashMap<String,String> hashmap = new HashMap<String,String>();
hashmap = iterateXML(hashmap);//取得數據源配置信息
driver = hashmap.get(Constant.DRIVER);
url = hashmap.get(Constant.URL);
username = hashmap.get(Constant.USERNAME);
password = hashmap.get(Constant.PASSWORD);
}
創建數據庫連接及關閉等操作,此處省略,請查看源碼。
最后我們寫一個main方法來測試一下是否能夠連接數據庫:
public static void main(String[] args){
DataBaseConnect db = new DataBaseConnect();
Connection con = db.getConnection();
try{
PreparedStatement psmt = con.prepareStatement("select count(*) from help_keyword");
ResultSet rs = psmt.executeQuery();
rs.next();
System.out.println(rs.getString(1));
rs.close();
psmt.close();
db.close(con);
}catch(Exception e){
throw new RuntimeException(e);
}
}
如果沒問題,控制臺將打印出:381 的結果。
這里附上DBConnect.xml中SQL Server 2000和Oracle的配置,其中SQL Server采用JTDS驅動。
<?xml version="1.0" encoding="UTF-8"?>
<demo>
<database>
<driver>net.sourceforge.jtds.jdbc.Driver</driver>
<url>jdbc:jtds:sqlserver://127.0.0.1:1433/pubs</url>
<username>sa</username>
<password>自己密碼(無密碼就空著)</password>
</database>
</demo>
<?xml version="1.0" encoding="UTF-8"?>
<demo>
<database>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@127.0.0.1:1521:自己的SID</url>
<username>system</username>
<password>自己密碼(無密碼就空著)</password>
</database>
</demo>
本著對別人負責,同時也是對自己負責,全部代碼,大象都是親手寫出來在電腦上測試過,并且還模擬了產生異常的環境,請大家放心使用。
點擊下載:dom4j-1.6.1.jar jaxen-1.1-beta-7.jar mysql-connector.jar jtds.jar classes12.jar
點擊下載:demo (直接導入即可,加入上面的jar包)
本文為菠蘿大象原創,如要轉載請注明出處。