您的当前位置:首页正文

连接池应用的实现

2024-11-30 来源:个人技术集锦

一个完整的连接池应用包括三个部分:
DBConnectionPool类,负责从连接池获取(或创建)连接、将连接返回给连接池、系统关闭时关闭所有连接释放所有资源;
DBConnectionManager类,负责装载和注册JDBC驱动、根据属性文件中定义的属性创建DBConnectionPool、跟踪应用程序对连接池的引用等;
应用程序对连接池的使用。

本文实现的数据库连接池包括一个管理类DBConnectionManager,负责提供与多个连接池对象(DBConnectionPool类)之间的 接口,每个连接池对象管理一组封装过的JDBC连接对象Conn,封装过的JDBC连接对象Conn可以被任意数量的Model层组件共享。
类Conn的设计很简单,如下所示:

Class Conn{

Private java.sql.Connection con;//数据库连接对象

Public Boolean inUse;//是否被使用

Public long lastAccess;//最近一次释放该连接的时间

Public int useCount;//被使用次数

}    


下面是实现连接池的主要代码:

//舒适化数据库连接池

public static synchronized void FashlnitPool() throws Exception{

try{
Class.forName(driver);

for(int i=0;i<size;i++){

Connection conn=createConnection();

if(conn!=null){

addConnection(conn);
}

}

}


//向连接池对象中添加数据库连接

private static void addConnection(Connection conn){

if(pool =null || pool1 =null){

pool=new Vector(size);

pool1=new Vector(size);

}
pool.addElement(conn);

pool.addElement("false");
}

//获取数据库连接

public static synchronized Connection getConn() throws Exception{

Connection conn=null;
try{
if(driver=null)
FastlnitPool();

//获得一个可用的(空闲的)连接

for(int i=1;i<pool.size();i++){

conn=(Connection)pool.elementAt(i);
if(pool1.elementAt(i)=="false"){

pool1.set(i,"true");
// System.out.println("从连接池中获取第“+(i+1)+”个空闲连接");

return conn;


}

}

//如果没有可用连接,且已有连接数小于最大连接数限制,则创建并增加一个新连接到连接池

conn=createConnection();
pool.addElement(conn);
pool1.addElement("true");
//System.out.println("所有连接都在使用,在连接池中在创建一个新连接");

}
catch(Exception e){

System.err.println(e.getMessage());

throw new Exception(e.getMessage());
}
return conn;//返回一个有效的新连接

}       

public Connection getConnection(String strDriver,String url,String strUserName,String strPassWord) throws SQLException{
try{
Class.forName(strDriver);

conn=DriverManager.getConnection(strUrl,strUserName,strPassWord);


}
return conn;

}

显示全文