日期:2014-05-16  浏览次数:20412 次

JDBC多数据库连接的实现



?1.使用JDBC来完成同类多数据的连接,或不同类数据库之间的连接,通用XML文件配置来完成。

 

?? 1.1? datebase_cfg.xml [数据库连接配置]

<?xml version="1.0" encoding="UTF-8"?>
<database>
    <sqlserver>
        <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver><!-- 数据库驱动 -->
        <userName>sa</userName>						<!-- 用户名 -->
        <userPass>123</userPass>					<!-- 密码 -->
        <state>1</state>                    		<!-- 开启1,关闭0 --><!-- 状态,是否开启 -->
        <dataBaseName>framemanager</dataBaseName>	<!-- 默认数据库名 -->
        <baseURL>localhost</baseURL>				<!-- 服务器地址 -->
    </sqlserver> 
	<mysql>
	    <driver>com.mysql.jdbc.Driver</driver>
	    <userName>root</userName>
	    <userPass>111111</userPass>
	    <state>0</state>                    		<!-- 开启2,关闭0 -->
	    <dataBaseName>bsdev</dataBaseName>
	    <baseURL>localhost</baseURL>
	</mysql>
	<oracle>
	    <driver>oracle.jdbc.driver.OracleDriver</driver>
	    <userName>root</userName>
	    <userPass>root</userPass>
	    <state>0</state>                   			<!-- 开启3,关闭0 -->
	    <dataBaseName>test</dataBaseName>
	    <baseURL>localhost</baseURL>
	</oracle>
</database>

?

1.2? GetConfig.java [数据库连接]

package com.smartcom.ma.util.DbUtils;

import java.net.URL;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;



/*************************************************
 * 采用单例模式读取xml配置文件sys-config.xml
 * @author Liyongbin
 *
 *************************************************/ 
public  class GetConfig { 

	    //静态的私有成员变量
		private static GetConfig instance = new GetConfig();
		private String DRIVER;				//数据库驱动
		private String URL;							//连接字符串
		private String USERNAME;				//用户名
		private String PASSWORD ;			//用户密码
		private String STATUS;				//状态
		private String DatabaseName="";				//数据库名
		public enum DBname{   //定义枚举类型
			DOCMANAGER,FRAMEMANAGER,WWWMANAGER ; ////定义多个SqlServer数据库名字枚举
		}
		
		private  Connection conn = null;
		private  PreparedStatement pst = null;
		private  CallableStatement cs= null;
		private  ResultSet res = null;
		private  Statement st = null;
		private Document doc;
		//公共的静态入口方法
		public static GetConfig getInstance() {
			return instance;
		} 
		
		
	  
		 /**********************************************
	     * 私有的构造方法[读取配置文件]
	     * @author Liyongbin [Apr 28, 2012 6:53:24 PM]
	     * @return
	     ***********************************************/
		private  GetConfig() {
			try {
				//获取当前项目在本地的物理路径
				// String url = ConfigReader.class.getClass().getResource("/").getPath();  
				URL url = GetConfig.class.getResource("datebase_cfg.xml"); 
				SAXReader reader = new SAXReader();
				doc = reader.read(url.getFile());
				// System.out.println(doc.asXML()); 
				Element root = doc.getRootElement();//xml文件的根目录  
				// Server
				STATUS = root.element("sqlserver").element("state").getText();
				if(null!=STATUS && "1".equals(STATUS)){
					DRIVER = root.element("sqlserver").element("driver").getText();
					USERNAME = root.element("sqlserver").element("userName").getText();
					PASSWORD = root.element("sqlserver").element("userPass").getText();
					//DatabaseName = root.element("sqlserver").element("dataBaseName").getText();//在后面设置
					URL = "jdbc:sqlserver://" + root.element("sqlserver").element("baseURL").getText() + ":1433;databasename="
					            + Da