`

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="
					            + DatabaseName; 
				}else if(null!=STATUS && "0".equals(STATUS)){
					STATUS = root.element("mysql").element("state").getText();
				}
				 
				// MySql
				if(null!=STATUS && "2".equals(STATUS)){
					DRIVER = root.element("mysql").element("driver").getText();
					USERNAME = root.element("mysql").element("userName").getText();
					PASSWORD = root.element("mysql").element("userPass").getText();
					DatabaseName = root.element("mysql").element("dataBaseName").getText();
					URL = "jdbc:mysql://" + root.element("mysql").element("baseURL").getText() + ":3306/"
					            + DatabaseName;
				}else if(null!=STATUS && "0".equals(STATUS)){
					STATUS = root.element("oracle").element("state").getText();
				}
				 
				// Oracle
				if(null!=STATUS && "3".equals(STATUS)){
					STATUS = root.element("oracle").element("state").getText();
					DRIVER = root.element("oracle").element("driver").getText();
					USERNAME = root.element("oracle").element("userName").getText();
					PASSWORD = root.element("oracle").element("userPass").getText();
					DatabaseName = root.element("oracle").element("dataBaseName").getText();
					URL = "jdbc:oracle:thin:@" + root.element("oracle").element("baseURL").getText() + ":1521:"
					            + DatabaseName;
				}
				
				if(null==STATUS || "0".equals(STATUS)){
					//读取配置文件出错[无可用的数据库配置]
				}
				System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>DRIVER:"+DRIVER);
				System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>USERNAME:"+USERNAME);
				System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>PASSWORD:"+PASSWORD);
				System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>DatabaseName:"+DatabaseName);
				System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>URL:"+URL);
				
			} catch (Exception e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
			}
		}
	  
		 /**********************************************
	     * 获取数据库的连接[默认]
	     * 
	     * @return
	     ***********************************************/
	    public  Connection getConn(DBname dbType){ 
	    	System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>dbType:"+dbType); 
	        try { 
	        	Class.forName(DRIVER);
	        	if(URL.indexOf("jdbc:sqlserver")!=-1){//Sql Server
	        		URL = URL.substring(0,URL.lastIndexOf("=")+1); //去掉数据库名称,重新组装[仅适用于多个SqlServer数据库的情况]
	        		switch (dbType) { 
		    			case FRAMEMANAGER: 	//框架
		    				URL += "framemanager";
		    				break;
		    			case WWWMANAGER: 	//网站
		    				URL += "wwwmanager";
		    				break;
		    			default: 			//知识管理[缺省]
		    				URL += "docmanager";
		    				break;
					} 
	        	}else if(URL.indexOf("jdbc:mysql")!=-1){//MySQL
	        		
	        	}else if(URL.indexOf("jdbc:oracle")!=-1){//Oracle
	        		
	        	}
    			System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>URL:"+URL);
    			conn = java.sql.DriverManager.getConnection(URL, USERNAME, PASSWORD);
	            conn.setAutoCommit(false);        //关闭自动提交功能,改为人工提交事务
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        } catch (SQLException e) {
	            e.printStackTrace();
	        }
	        return conn;
	    }
	    
	    /*********************************************
	     * 获取MA数据库的连接[框架数据库]
	     * @author Liyongbin [Apr 28, 2012 7:11:12 PM]
	     * @return 框架数据库连接
	     *********************************************/
	    public Connection getMAConn(){
    	 try {
    		 conn =  getConn(DBname.FRAMEMANAGER);
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 
	        return conn;
	    }
	    
	    /*********************************************
	     * 获取KM数据库的连接[知识管理系统]
	     * @author Liyongbin [Apr 28, 2012 7:11:13 PM]
	     * @return 知识管理数据库连接
	     *********************************************/
	    public Connection getKMConn(){
	    	try {
	    		 conn =  getConn(DBname.DOCMANAGER);
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 
	        return conn;
	    }
	     

	    /*********************************************
	     * 获取网站数据库的连接
	     * @author Liyongbin [Apr 28, 2012 7:11:15 PM]
	     * @return 网站数据库连接
	     ********************************************/
	    public  Connection getWWWConn(){
	    	try {
	    		 conn =  getConn(DBname.WWWMANAGER);
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 
	        return conn;
	    }
 
	    
	    /**********************************************
	     * 关闭数据库参数
	     * @author Liyongbin [Apr 29, 2012 7:25:31 AM]
	     * @return
	     **********************************************/
	    public void close(){
	        try {
	            if(res != null){
	                res.close();
	            }
	            if(pst != null){
	                pst.close();
	            }
	            if(st != null){
	                st.close();
	            }
	            if(cs != null){
	                cs.close();
	            }
	            if(conn != null){
	                conn.close();
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	        }
	    } 
}

 

1.3 DBOperation.java [CRUD]

package com.smartcom.ma.util.DbUtils;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
 
public class DBOperation {
	private static Connection conn = null;
	private static PreparedStatement pst = null;
	private static CallableStatement cs= null;
	private static ResultSet res = null;
	private static Statement st = null;
    /**********************************************
     * 执行sql语句的增删改
     * @author Liyongbin [Apr 28, 2012 7:20:34 PM]
     * @return
     ***********************************************/
    public static Integer executeSQL(String sql,String[] param) throws SQLException{
        Integer result = 0;
        conn = null;
        pst = null;
        try {
            conn = GetConfig.getInstance().getConn(null);
            pst = conn.prepareStatement(sql);
            if(param != null){
                for(int i = 0; i < param.length; i++){
                    pst.setString(i + 1, param[i]);
                }
            }
            result = pst.executeUpdate();
            conn.commit();//提交事务
        } catch (SQLException e) {
            conn.rollback();//回滚事务
            e.printStackTrace();
        }finally{
        	 GetConfig.getInstance().close();
        }
        return result;
    }
    
     
    /**********************************************
     * 普通sql查询
     * @author Liyongbin [Apr 29, 2012 7:48:11 AM]
     * @param sql
     * @param param
     * @return
     ***********************************************/
    public static Object[][] executeQuery(Connection conn,String sql,String[] param){ 
    	ResultSetMetaData metadata = null; 	//数据的结构数据
    	Object[][] rets =null; 				//输出结果
    	int columnCount=0;					//行数 
        int rowCount = 0;  					//列数
        try {
        	//连接数据库
        	pst = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  
        	//设置参数
            if(param != null){
                for(int i = 0; i < param.length; i++){
                    pst.setString(i + 1, param[i]);
                }
            }
            //执行查询
            res = pst.executeQuery();
            //取数据结构数据
            metadata = res.getMetaData(); 
            //取行数
        	columnCount = metadata.getColumnCount();  
            res.last(); 
            //取列数 
            rowCount = res.getRow();  
            res.first();
            //创建结果数组
            rets = new Object[rowCount][columnCount]; 
            //遍历数据集
        	for(int i=0;i<rowCount;res.next()){
        		for(int j=0;j<columnCount;j++){ 
        			rets[i][j] = res.getObject(j+1); 
        		} 
        		i++;
        	} 
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
        	if(null!=conn){
        		try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
        	}
        } 
        return rets;
    }
    
    
    /**********************************************
     * 普通sql查询
     * @author Liyongbin
     * @param sql
     * @param param
     * @return
     ***********************************************/
    public static Object[][] executeQuery(String sql,String[] param){ 
    	try {
    		Connection conn =  GetConfig.getInstance().getConn(null);
    		return executeQuery(conn,sql,param);
		} catch (Exception e) {
			 e.printStackTrace();
		}finally{
        	if(null!=conn){
        		try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
        	}
        } 
    	return null;
    } 
    
    /*********************************************
     * 获取MA数据库的连接[框架数据库]
     * @author Liyongbin [Apr 28, 2012 7:11:12 PM]
     * @return 框架数据库连接
     *********************************************/
    public static Connection getMAConn(){
     Connection conn =null;
   	 try {
   		 conn =  GetConfig.getInstance().getMAConn();
	        } catch (Exception e) {
	            e.printStackTrace();
	        } 
	        return conn;
	    }
	    
    /*********************************************
     * 获取KM数据库的连接[知识管理系统]
     * @author Liyongbin [Apr 28, 2012 7:11:13 PM]
     * @return 知识管理数据库连接
     *********************************************/
    public Connection getKMConn(){
    	Connection conn =null;
    	try {
    		 conn =  GetConfig.getInstance().getKMConn();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return conn;
    }
     

    /*********************************************
     * 获取网站数据库的连接
     * @author Liyongbin [Apr 28, 2012 7:11:15 PM]
     * @return 网站数据库连接
     ********************************************/
    public  Connection getWWWConn(){
    	Connection conn =null;
    	try {
    		 conn =  GetConfig.getInstance().getWWWConn();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return conn;
    }

	    
}

 

  • 大小: 7.2 KB
分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...

    常用jdbc数据库连接jar包,数据库连接池jar包

    本资源集合了常用的JDBC数据库连接jar包,以及一些知名的数据库连接池实现,如dbcp和c3p0,这对于开发人员来说是非常宝贵的资源。 首先,让我们了解一下JDBC。JDBC提供了一套标准的API,包括接口和类,使得开发者...

    java_jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员...

    JDBC连接数据库步骤及代码

    在这个类中,我们将实现获取数据库连接的方法。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionTest { private static Connection...

    JDBC连接数据库方法文档

    System.out.println("数据库连接失败!"); se.printStackTrace(); } ``` 四、创建一个 Statement 要执行 SQL 语句,必须获得 java.sql.Statement 实例,Statement 实例分为以下 3 种类型: 1. 执行静态 SQL 语句...

    JDBC不同数据库连接

    ### JDBC不同数据库连接详解 #### 一、引言 Java Database Connectivity (JDBC) 是 Java 平台上的标准 SQL 数据库访问技术。它提供了一种统一的方式来与各种关系型数据库进行交互,允许开发者通过标准的 API 来...

    jdbc连接数据库步骤

    3. 创建数据库连接: 连接数据库需要向java.sql.DriverManager请求并获得一个Connection对象,该对象代表了一个数据库的连接。通过调用DriverManager的getConnection()方法并传入数据库路径、用户名和密码来获得这...

    实验3 JDBC操作数据库3

    3. **数据库连接**:使用JDBC进行数据库连接时,首先需要加载数据库驱动,这可以通过`Class.forName()`方法实现。然后,使用`DriverManager.getConnection()`方法创建`Connection`对象,这是与数据库建立连接的关键...

    JDBC连接数据库经验总结

    在实际项目中,为了提高性能和资源利用率,通常会使用数据库连接池,如Apache的DBCP、C3P0,或者HikariCP。连接池预先创建一定数量的连接,当需要时直接分配,用完后归还,避免频繁创建和销毁连接。 ### 4. ...

    jdbc连接数据库事务工厂模式

    例如,使用`Class.forName()`加载数据库驱动,通过`DriverManager.getConnection()`获取数据库连接,`Statement`或`PreparedStatement`对象来执行SQL,最后使用`Connection.close()`关闭连接。 其次,事务是数据库...

    JDBC连接实现简单学生管理系统(附数据库).zip

    **JDBC连接实现简单学生管理系统** 在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一种标准接口。本项目“JDBC连接实现简单学生管理系统”旨在通过JDBC技术,创建一个能够连接...

    JDBC数据库连接池实现原理

    实现JDBC数据库连接池的基本步骤如下: 1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的...

    java使用jdbc将数据库数据导出到csv文件.pdf

    在将数据库数据导出到 CSV 文件之前,首先需要获取数据库连接。这里使用了 reqBean.getDataSyncExecInfo().getConn() 方法来获取连接,这个方法返回一个 Connection 对象,该对象是 JDBC 中的核心对象,用于与数据库...

    jdbc通用数据库连接

    **jdbc通用数据库连接** 在Java编程中,JDBC(Java Database Connectivity)是Java语言与各种数据库进行交互的一套标准API。它允许Java程序通过编写SQL语句来操作数据库,实现数据的存储、检索和更新等功能。JDBC为...

    jdbc数据库连接 模板代码

    以下是对给定文件中提到的JDBC数据库连接模板代码的知识点详细解析。 ### JDBC概念 JDBC是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过JDBC,开发者可以将SQL语句发送到几乎任何...

    JDBC连接数据库代码大全

    JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种API。它提供了一种标准的方式来访问和...同时,关闭不再需要的资源是良好的编程习惯,可以帮助优化内存使用和防止数据库连接耗尽。

    Java-jdbc数据库连接池总结.doc

    总的来说,Java JDBC数据库连接池是提升Web应用性能的重要技术,通过有效的连接管理和复用,它降低了数据库操作的开销,提升了系统的稳定性和响应速度。在开发过程中,选择合适的连接池实现,并对其进行合理配置,是...

Global site tag (gtag.js) - Google Analytics