一个连接池的实现,很不错!

本文介绍了一个简单的数据库连接池实现方案,通过 ConnPool 和 ConnManager 类管理数据库连接,支持连接的获取、释放及销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是一个连接池的简单实现:
虽然很简单,但是和网上流行的连接池的实现思路大体上都是相近的!
ConnPool.java:
package bbs;

import java.sql.*;
import java.util.*;

public class ConnPool {
private int ConNow=0;
private Vector connections = new Vector();
private String PoolName;
private String DriverName;
private String DbId;
private String UserName;
private String Password;
private int MaxConn;

public ConnPool(String PoolName, String DriverName, String DbId, String UserName, String Password, intMaxConn) {
this. PoolName = PoolName;
this. DriverName = DriverName;
this. DbId = DbId;
this. UserName = UserName;
this. Password = Password;
this. MaxConn = MaxConn;
}

public synchronized void releaseConnection(Connection con) {
connections.addElement(con);
ConNow--;
}

public synchronized Connection getConnection() {
Connection con = null;
if (connections.size() > 0) {
con = (Connection) connections.elementAt(0);
connections.removeElementAt(0);
try {
if (con.isClosed())
con = getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
else if (MaxConn == 0 || ConNow <MaxConn) {
con = new Connection();
}
if (con != null) {
ConNow++;
}
return con;
}


private Connection newConnection() {
Connection con = null;
try {
Class.forName(DriverName);
con = DriverManager.getConnection(DbId,UserName, Password);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
return con;
}

public synchronized void closeConn() {
Enumeration allConnections = connections.elements();
while (allConnections.hasMoreElements()) {
Connection con = (Connection) allConnections.nextElement();
try {
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
connections.removeAllElements();
}
}
ConnManager.java:
package bbs;

import java.sql.*;
import java.util.*;

public class ConnManager {
private Vector PoolNames = new Vector();
private Vector DriverNames = new Vector();
private Vector DbIds = new Vector();
private Vector UserNames = new Vector();
private Vector Passwords = new Vector();
private Vector MaxConns = new Vector();
private Hashtable connPools = new Hashtable();

public ConnManager() {
PoolNames.addElement("bbs");
DriverNames.addElement("org.gjt.mm.mysql.Driver");
DbIds.addElement("jdbc:mysql://localhost:3306/bbs");
UserNames.addElement("root");
Passwords.addElement("123");
MaxConns.addElement("10");

createPool();
}

private void createPool() {
for(int i = 0; i<PoolNames.size();i++){
String PoolName = PoolNames.elementAt(i).toString();
String DriverName = DriverNames.elementAt(i).toString();
String DbId = DbIds.elementAt(i).toString();
String UserName = UserNames.elementAt(i).toString();
String Password = Passwords.elementAt(i).toString();
int Maxconn=0;
try {
Maxconn = Integer.parseInt(MaxConns.elementAt(i).toString());
}
catch (NumberFormatException e) {
e.printStackTrace();
}
ConnPool Pool = new ConnPool(PoolName, DriverName, DbId,UseName, Password, Maxconn);
connPools.put(PoolName, Pool);
}
}

public Connection getConnection(String name) {
ConnPool Pool = (ConnPool) connPools.get(name);
if (Pool != null)
return Pool.getConnection();
return null;
}

public void releaseConnection(String name, Connection con) {
ConnPool pool = (ConnPool) connPools.get(name);
if (pool != null)
pool.releaseConnection(con);
}

public synchronized void destroyPool () {
Enumeration allPools = connPools.elements();
while (allPools.hasMoreElements()) {
ConnPool Pool = (ConnPool) allPools.nextElement();
Pool. destroyPool ();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值