下面是一个连接池的简单实现:
虽然很简单,但是和网上流行的连接池的实现思路大体上都是相近的!
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 ();
}
}
}
分享到:
相关推荐
1. **JdbcPool**:这是一个简单的自定义数据库连接池实现,通常用于教学或小型项目。它通过维护一个连接池,每当需要数据库连接时,就从池中获取,用完后归还。JdbcPool的基本思路是初始化时创建一定数量的数据库...
其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...
在Java Web开发中,数据库连接池是至关重要的组件,它能有效地管理数据库连接,提高系统的性能和资源利用率。本文将详细介绍两种广泛使用的...如果对监控要求不高,且希望连接池配置更加灵活,C3P0则是一个不错的选择。
Apache Commons DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池实现。它基于Jakarta POI项目中的DBCP组件,提供了一个健壮且广泛使用的数据库连接池解决方案。DBCP提供了基本的连接池功能...
最后网上找到一个ADO的连接池实现,经过改进已在公司服务器上使用,经过半年的考验,没发现什么异常,性能可靠。希望对大家有所帮助。 注: 1.ADOConnectionPool.pas为连接池实现单元。DbHelper.pas为为了方便访问...
c3p0是一个完全开源的JDBC连接池,由Miquel Arroyo开发,遵循LGPL协议。它提供了一种高效、灵活的数据库连接管理方式,支持多种数据库,如MySQL、Oracle、PostgreSQL等。c3p0的核心特性包括连接池管理、自动测试连接...
不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP数据库连接池的研究与实现(源代码+论文).rar不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP数据库连接池的研究与实现(源代码+论文).rar不错的适合练手...
DBCP作为较早的数据库连接池实现,虽然在性能和功能上可能不如后来的C3P0、HikariCP等,但其简单易用,对于小型项目或学习数据库连接池的概念是个不错的选择。然而,在实际生产环境中,考虑到稳定性和性能优化,通常...
在Hibernate中配置连接池,我们需要选择一个合适的连接池实现。文档“hibernater配置proxool.doc”可能包含有关使用Proxool作为连接池的详细步骤。Proxool是一个轻量级的开源JDBC连接池,它具有监控和性能报告功能,...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心功能包括: 1. **连接创建与回收**:C3P0能够自动创建和回收数据库连接,避免了手动管理连接带来的问题,提升...
它是基于Apache Commons Pool和Apache Commons Lang两个组件构建的,提供了一个高效的、包含许多可配置参数的数据库连接池实现。 DBCP的主要特点包括: 1. **连接池管理**:DBCP能够维护一个数据库连接池,当应用...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0由Miguel Grinberg创建,其设计目标是提供更强大的连接管理功能,优化数据库连接性能,同时降低资源消耗。在Java应用...
DBCP是一个基于Jakarta-Commons-Pool和Jakarta-Commons-DBUtils的数据库连接池实现。它的主要特点包括: 1. **简单易用**:DBCP的API相对简单,易于集成到各种Java应用中。 2. **基于Pool2**:它使用了Apache的Pool...
总的来说,C3P0是一个强大且易用的数据库连接池实现,它简化了数据库连接的管理,并通过优化连接的生命周期,提升了系统的效率和可靠性。在Java项目中,尤其是那些需要频繁进行数据库交互的应用,使用C3P0是一个不错...
总的来说,Proxool是一个简洁而实用的数据库连接池实现,对于需要快速搭建数据库连接池的项目,是一个不错的选择。理解并熟练掌握其配置和使用方法,对于提高应用程序的性能和可维护性至关重要。
因此,在实际项目中,使用 Druid 连接池是一个不错的选择。 本文通过示例代码展示了如何在 Spring Boot 项目中使用 Druid 连接池来管理数据库连接,并对 Druid 连接池的特性和配置信息进行了详细的介绍。
1. **Apache DBCP**:较早的连接池实现,但在性能和稳定性上不如c3p0。 2. **HikariCP**:新兴的高性能连接池,性能优于c3p0,但配置较为复杂。 3. **Druid**:阿里巴巴开源的连接池,集成了监控和日志等功能,但在...