最后我们来修改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包)
本文为菠萝大象原创,如要转载请注明出处。