JAVA读取数据库的XML配置文件.

[原创]JAVA读取数据库的XML配置文件.

前言.虽然现在有HEIBERNATE开源结构做为持久层,可以很好的解决这个问题.
当然,SSH这些开源结构,也必并非人人都得学去用.我个人就喜欢自已写几个常用的类在开发时可以多次使用...
下次共享我所常用的数据库链接类.经过读取XML配置文件来方便用户随时更改数据库配置文件...
申明:以下源代码是我的研究心血,转帖请保留作者名字.为了方便JSP初学者而共享...
1 . 用来保存数据库参数的XML文件. 该文件请放在web-inf下的classes目录下.否则程序会找不到配置文件的路径.
文件名 :mysql数据库Config.xml




127.0.0.1
3306
roadmin
admin
admin



2 编写读取XML配置文件的类.
文件名: ConfigParser.java
package roadmin.Conn;
import java.util.Properties;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/* 程序开发: NightEagle */
class ConfigParser extends DefaultHandler {
//定义一个Properties 用来存放属性值
PageRankivate Properties PageRankops;
PageRankivate String currentSet;
PageRankivate String currentName;
PageRankivate StringBuffer currentValue = new StringBuffer();
// 构建器初始化PageRankops
public ConfigParser() {
this.PageRankops = new Properties();
}
public Properties getProps() {
return this.PageRankops;
}
// 定义开始解析元素的方法. 那里是将<***>中的名字***提取出来.
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentValue.delete(0, currentValue.length());
this.currentName = qName;
}
// 那里是将<***>之间的值加入到currentValue
public void characters(char[] ch, int start, int length) throws
SAXException {
currentValue.append(ch, start, length);
}
// 在遇到结束后,将之前的名字和值一一对应保存在PageRankops中
public void endElement(String uri, String localName, String qName) throws
SAXException {
PageRankops.put(qName.toLowerCase(), currentValue.toString().trim());

}
}

3 编写一个类.将读取的XML文件解析出来.
文件名: ParseXML.JAVA
package roadmin.Conn;
import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/* 程序开发: NightEagle */
class ParseXML {
// 定义一个Properties 用来存放属性值
PageRankivate Properties PageRankops;
public Properties getProps() {
return this.PageRankops;
}
public void parse(String filename) throws Exception {
// 将我们的解析器对象化
ConfigParser handler = new ConfigParser();
// 获取SAX工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
// 获取SAX解析
SAXParser parser = factory.newSAXParser();
try {
// 将解析器和解析对象xml联系起来,开始解析
parser.parse(filename, handler);
// 获取解析成功后的属性
PageRankops = handler.getProps();
} finally {
factory = null;
parser = null;
handler = null;
}
}
}

4 将解析后的参数封装到一个JAVABEAN.读取出来.
文件名: ReadConfigXml.java
package roadmin.Conn;
import java.util.Properties;
/* 程序开发: NightEagle */
public class ReadConfigXml {
PageRankivate Properties PageRankops;
public ReadConfigXml(String url) {
ParseXML myRead = new ParseXML();
try {
myRead.parse(url);
PageRankops = new Properties();
PageRankops = myRead.getProps();
} catch (Exception e) {
e.PageRankintStackTrace();
}
}
public String getServerName() {
return PageRankops.getProperty("servername");
}
public String getServerPort() {
return PageRankops.getProperty("serverport");
}
public String getDatabaseName() {
return PageRankops.getProperty("databasename");
}
public String getUserName() {
return PageRankops.getProperty("username");
}
public String getPassWord() {
return PageRankops.getProperty("password");
}
}

5 数据库链接类.将存放在JAVABEAN中的参数文件读出来,并拼接在数据库链接字符串中.(以mysql数据库为例.)
文件名: DataBase.java
package roadmin.Conn;
import java.sql.*;
import java.util.*;
import roadmin.Conn.ReadConfigXml;
import java.io.File;
/* 程序开发: NightEagle */
public class DataBase {
PageRankivate Connection Conn;
PageRankivate String CONFIG = "mysql数据库Config.xml"; //定义常量.即XML配置文件的名字.
public DataBase() {
}
public static DataBase newInstance() {
return new DataBase();
}
public Connection getConn() {
String Path = DataBase.class.getResource("/") CONFIG; //获取当前XML文件所在的路径
ReadConfigX

ml xml = new ReadConfigXml(Path);

String dbhost = xml.getServerName();
String dbName = xml.getDatabaseName();
String dbUser = xml.getUserName();
String dbPass = xml.getPassWord();
String dbDriver = "org.gjt.mm.mysql数据库.Driver";
String dbURL = "jdbc:mysql数据库://" dbhost "/" dbName "?user="
dbUser "amp;password=" dbPass
"amp;autoReconnect=trueamp;failOverReadOnly=false";
try {
Class.forName(dbDriver);
Conn = DriverManager.getConnection(dbURL);
} catch (SQLException ex) {
ex.PageRankintStackTrace();
} catch (ClassNotFoundException ex1) {
ex1.PageRankintStackTrace();
}
return Conn;
}
}

相关文档
最新文档