[原创]JAVA读取数据库的XML配置文件.
前言.虽然现在有HEIBERNATE开源结构做为持久层,可以很好的解决这个问题.
当然,SSH这些开源结构,也必并非人人都得学去用.我个人就喜欢自已写几个常用的类在开发时可以多次使用...
下次共享我所常用的数据库链接类.经过读取XML配置文件来方便用户随时更改数据库配置文件...
申明:以下源代码是我的研究心血,转帖请保留作者名字.为了方便JSP初学者而共享...
1 . 用来保存数据库参数的XML文件. 该文件请放在web-inf下的classes目录下.否则程序会不到配置文件的路径.
文件名 :mysql数据库l
<?xml version="1.0" encoding="UTF-8"?>
<!--
========= 对照下表自行更改数据库参数 =========
SererName  =  数据库服务器IP地址
ServerPort  =  数据库服务器端口
DataBaseName =  数据库名字
UserName  =  数据库登陆帐号
Password  =  数据库登陆密码
说明 : 请确保你的帐号具有操作该数据库的所有权限.
程序开发: NightEagle
==============================================
-->
<reportenv>
<datasource>
<servername>127.0.0.1</servername>
<serverport>3306</serverport>
<databasename>roadmin</databasename>
<username>admin</username>
<password>admin</password>
</datasource>
</reportenv>
2  编写读取XML配置文件的类.
文件名: ConfigParser.java
package roadmin.Conn;
import java.util.Properties;
l.sax.Attributes;
l.sax.SAXException;
l.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.LowerCase(), String().trim());
}
}
3 编写一个类.将读取的XML文件解析出来.
文件名: ParseXML.JAVA
package roadmin.Conn;
import java.util.Properties;
l.parsers.SAXParser;
l.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 = wInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
// 获取SAX解析
SAXParser parser = wSAXParser();
try {
// 将解析器和解析对象xml联系起来,开始解析
parser.parse(filename, handler);
// 获取解析成功后的属性
PageRankops = Props();
} 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 = Props();
} catch (Exception e) {
e.PageRankintStackTrace();
}
}
public String getServerName() {
Property("servername");
}
public String getServerPort() {
Property("serverport");
}
public String getDatabaseName() {
Property("databasename");
}
public String getUserName() {
Property("username");
}
public String getPassWord() {
Property("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数据库l"; //定义常量.即XML配置文件的名字.
public DataBase() {
}
public static DataBase newInstance() {
return new DataBase();
}
public Connection getConn() {
String Path = Resource("/") CONFIG; //获取当前XML文件所在的路径
ReadConfigX
ml xml = new ReadConfigXml(Path);
String dbhost = ServerName();
String dbName = DatabaseName();
String dbUser = UserName();
String dbPass = PassWord();
String dbDriver = "sql数据库.Driver";
String dbURL = "jdbc:mysql数据库://"  dbhost  "/"  dbName  "?user="
dbUser  "amp;password="  dbPass
"amp;autoReconnect=trueamp;failOverReadOnly=false";
try {
Class.forName(dbDriver);
java库Conn = Connection(dbURL);
} catch (SQLException ex) {
ex.PageRankintStackTrace();
} catch (ClassNotFoundException ex1) {
ex1.PageRankintStackTrace();
}
return Conn;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。