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文件所在的路径
  ReadConfigXml 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;
}
}

你可能感兴趣的:(JAVA)