📄 dbmanager.java
字号:
{
freeConnections = new Vector();
monitConnections = new Vector();
//启动监视线程
monThread = new MonitThread();
name = s;
URL = s1;
user = s2;
password = s3;
maxConn = i;
monThread.start();
}
}
private static DBManager instance = null;
private static int clients = 0;
private static int DBConnections = 0;
public static String FirstDriverName = "";
private Vector drivers = null;
private PrintWriter log = null;
private Hashtable pools = null;
public static synchronized DBManager getInstance()
{
if(instance == null)
{
instance = new DBManager();
System.out.println("Connection pool: The DataBase Manager (Pool) Created OK!");
}
clients++;
return instance;
}
//构造函数。
/***************************************************************************
* 构造函数 *
**************************************************************************/
private DBManager()
{
drivers = new Vector();
pools = new Hashtable();
init();
}
//释放连接
/***************************************************************************
* 释放连接 *
**************************************************************************/
public void freeConnection(String s, Connection connection)
{
DBConnectionPool dbconnectionpool = (DBConnectionPool)pools.get(s);
if(dbconnectionpool != null)
dbconnectionpool.freeConnection(connection);
}
//获取数据库连接
/***************************************************************************
* 获取数据库连接 *
**************************************************************************/
public Connection getConnection(String s)
{
DBConnectionPool dbconnectionpool = (DBConnectionPool)pools.get(s);
if(dbconnectionpool != null)
return dbconnectionpool.getConnection();
else
return null;
}
//获取数据库连接重载
/***************************************************************************
* 获取数据库连接重载 *
**************************************************************************/
public Connection getConnection(String s, long l)
{
DBConnectionPool dbconnectionpool = (DBConnectionPool)pools.get(s);
if(dbconnectionpool != null)
return dbconnectionpool.getConnection(l);
else
return null;
}
//释放连接池
/***************************************************************************
* 释放连接池 *
**************************************************************************/
public synchronized void release()
{
if(--clients != 0)
return;
DBConnectionPool dbconnectionpool;
for(Enumeration enumeration = pools.elements(); enumeration.hasMoreElements(); dbconnectionpool.release())
dbconnectionpool = (DBConnectionPool)enumeration.nextElement();
for(Enumeration enumeration1 = drivers.elements(); enumeration1.hasMoreElements();)
{
Driver driver = (Driver)enumeration1.nextElement();
try
{
DriverManager.deregisterDriver(driver);
log("\u64A4\u9500JDBC\u9A71\u52A8\u7A0B\u5E8F " + driver.getClass().getName() + "\u7684\u6CE8\u518C");
}
catch(SQLException sqlexception)
{
log(sqlexception, "\u65E0\u6CD5\u64A4\u9500\u4E0B\u5217JDBC\u9A71\u52A8\u7A0B\u5E8F\u7684\u6CE8\u518C: " + driver.getClass().getName());
}
}
}
//创建连接池
/***************************************************************************
* 创建连接池 *
**************************************************************************/
private void createPools(Properties properties)
{
for(Enumeration enumeration = properties.propertyNames(); enumeration.hasMoreElements();)
{
String s = (String)enumeration.nextElement();
if(s.endsWith(".url"))
{
String s1 = s.substring(0, s.lastIndexOf("."));
String s2 = properties.getProperty(s1 + ".url");
if(s2 == null)
{
log("\u6CA1\u6709\u4E3A\u8FDE\u63A5\u6C60" + s1 + "\u6307\u5B9AURL");
}
else
{
String s3 = properties.getProperty(s1 + ".user");
String s4 = properties.getProperty(s1 + ".password");
String s5 = properties.getProperty(s1 + ".maxconn", "0");
int i;
try
{
i = Integer.valueOf(s5).intValue();
}
catch(NumberFormatException numberformatexception)
{
log("\u9519\u8BEF\u7684\u6700\u5927\u8FDE\u63A5\u6570\u9650\u5236: " + s5 + " .\u8FDE\u63A5\u6C60: " + s1);
i = 0;
}
DBConnectionPool dbconnectionpool = new DBConnectionPool(s1, s2, s3, s4, i);
//在哈希表中建立s1到dbconnectionpool连接池的映射
pools.put(s1, dbconnectionpool);
log("\u6210\u529F\u521B\u5EFA\u8FDE\u63A5\u6C60" + s1);
}
}
}
}
//初始化
/***************************************************************************
* 初始化 *
**************************************************************************/
private void init()
{
//读入配置文件内容
java.io.InputStream inputstream = getClass().getResourceAsStream("/db.properties");
Properties properties = new Properties();
try
{
properties.load(inputstream);
}
catch(Exception exception)
{
System.err.println("\u4E0D\u80FD\u8BFB\u53D6\u5C5E\u6027\u6587\u4EF6. \u8BF7\u786E\u4FDDdb.properties\u5728CLASSPATH\u6307\u5B9A\u7684\u8DEF\u5F84\u4E2D");
return;
}
String s = properties.getProperty("logfile", "DBManager.log");
try
{
log = new PrintWriter(new FileWriter(s, true), true);
}
catch(IOException ioexception)
{
System.err.println("\u65E0\u6CD5\u6253\u5F00\u65E5\u5FD7\u6587\u4EF6: " + s);
log = new PrintWriter(System.err);
}
//加载JDBC驱动
loadDrivers(properties);
//创建连接池
createPools(properties);
}
//加载JDBC驱动
/***************************************************************************
* 加载JDBC驱动 *
**************************************************************************/
private void loadDrivers(Properties properties)
{
//获取配置文件中驱动配置信息
String s = properties.getProperty("drivers");
//解析各个驱动名称
for(StringTokenizer stringtokenizer = new StringTokenizer(s); stringtokenizer.hasMoreElements();)
{
String s1 = stringtokenizer.nextToken().trim();
try
{
//加载该驱动,并注册它
Driver driver = (Driver)Class.forName(s1).newInstance();
DriverManager.registerDriver(driver);
drivers.addElement(driver);
if(FirstDriverName.length() <= 1)
FirstDriverName = s1;
log("\u6210\u529F\u6CE8\u518CJDBC\u9A71\u52A8\u7A0B\u5E8F" + s1);
}
catch(Exception exception)
{
log("\u65E0\u6CD5\u6CE8\u518CJDBC\u9A71\u52A8\u7A0B\u5E8F: " + s1 + ", \u9519\u8BEF: " + exception);
}
}
}
private void log(String s)
{
}
private void log(Throwable throwable, String s)
{
log.println(new Date() + ": " + s);
throwable.printStackTrace(log);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -