📄 dbconnectionmanager.java
字号:
//////////////////////////////////////////////////
// 公司名:VCOM
// Project:计费接口
// By:XQG
// Discription:类调配中心,监听一个端口,根据接收到的
// 数据调用不同的类处理事务
// Version:v1.0
// Modify:null
//////////////////////////////////////////////////
package db;
/**
* 2005-12-15 13:28修改为使用oracle连接池
*/
import java.sql.*;
import java.util.*;
import sqlite.Configure;
/**
* 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接
* 池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例.
*/
public class DBConnectionManager {
static private DBConnectionManager instance; // 唯一实例
private String dsname = ""; //缺省的连接池
private String prefix = "proxool.";
/**
* 返回唯一实例.如果是第一次调用此方法,则创建实例
*
* @return DBConnectionManager 唯一实例
*/
static synchronized public DBConnectionManager getInstance() {
if (instance == null) {
instance = new DBConnectionManager();
}
return instance;
}
/**
* 建构函数私有以防止其它对象创建本类实例
*/
public DBConnectionManager() {
init();
}
/**
* 将连接对象返回给由名字指定的连接池
*
* @param name 在属性文件中定义的连接池名字
* @param con 连接对象
*/
public void freeConnection(String name, Connection con) {
try {
if (con != null && !con.isClosed()) {
con.close();
//System.out.println("数据库连接" + con + "已释放!");
}
con = null;
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public void freeConnection(Connection con) {
try {
if (con != null && !con.isClosed()) {
con.close();
//System.out.println("数据库连接" + con + "已释放!");
}
con = null;
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* 获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数
* 限制,则创建并返回新连接
*
* @param name 在属性文件中定义的连接池名字
* @return Connection 可用连接或null
*/
public Connection getConnection(String name) throws SQLException {
//System.out.println(name);
return DriverManager.getConnection(prefix + name);
}
/**
* 从默认数据源获得连接
* @return Connection
* @throws SQLException
*/
public Connection getConnection() throws SQLException {
return this.getConnection(dsname);
}
/**
* 读取属性完成初始化
*/
private void init() {
// org.logicalcobwebs.proxool.configuration.JAXPConfigurator.configure("WEB-INF/classes/proxool.xml", false);
try {
Configure config = new Configure();
String dbtype=config.getProperty("dbtype");
this.dsname = dbtype;
String url ="";
if(dbtype.equalsIgnoreCase("sqlite")){
url = getClass().getClassLoader().getResource("sqlite.xml")
.getPath();
}else if(dbtype.equalsIgnoreCase("hsql")){
url = getClass().getClassLoader().getResource("hsql.xml")
.getPath();
}else if(dbtype.equalsIgnoreCase("mysql")){
url = getClass().getClassLoader().getResource("mysql.xml")
.getPath();
}else if(dbtype.equalsIgnoreCase("oracle")){
url = getClass().getClassLoader().getResource("oracle.xml")
.getPath();
}else if(dbtype.equalsIgnoreCase("enterprisedb")){
url = getClass().getClassLoader().getResource("enterprisedb.xml")
.getPath();
}else if(dbtype.equalsIgnoreCase("kingbase")){
url = getClass().getClassLoader().getResource("kingbase.xml")
.getPath();
}
System.out.println("========="+url);
String pf = java.net.URLDecoder.decode(url, "UTF-8");
// Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
org.logicalcobwebs.proxool.configuration.JAXPConfigurator
.configure(pf, false);
System.out.println("=======111=====");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设定数据源名称,默认为pool
* @param ds String 数据库源名称
*/
public void setDsname(String ds) {
this.dsname = ds;
}
/**
* 获得当前数据源名称
* @return String
*/
public String getDsname() {
return this.dsname;
}
/**
* 缓冲的动态连接,静态连接通过连接池的配置文件解决,需要动态的连接到另外的数据库
* 上时使用此方法。
* @param driverClass String 数据库驱动
* @param dburl String 数据库连接URL
* @param dbUser String 数据库用户名
* @param dbPass String 数据库密码
* @param alias String 数据库别名,用来缓冲连接,下次用此连接时要用同样的名字哦
* @return Connection 返回一个连接
* @throws Exception
*/
public Connection getDynamicCon(String driverClass, String driverUrl,
String dbUser, String dbPass, String alias) throws Exception {
Connection connection;
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Properties info = new Properties();
String url = "proxool." + alias + ":" + driverClass + ":" + driverUrl;
System.out.println("url=="+url);
try {
org.logicalcobwebs.proxool.ProxoolFacade.registerConnectionPool(
url, info);
} catch (Exception e) {
}
alias = info.getProperty("alias");
connection = DriverManager.getConnection("proxool." + alias);
System.out.println(connection);
return connection;
}
public static void main(String[] args) {
//DBConnectionManager db = new DBConnectionManager();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -