一种数据库连接池的设计与实现

一种数据库连接池的设计与实现*
摘要:
在一个基于数据库的软件系统中,建立数据库连接的操作是代价t大的操作之一。,民多时候,可能访问速度瓶颈就在
于此。通过侠用连接池,可大大捉高程序效卑。
关键词:
连接池 数据库 SQL操作 连接管理类
引言
一般情况下,在开发基于数据库的程序时,传统的模式基本上是按以下步骤进行的:
A. 在主程序中建立数据库连接;
B. 进行SQL操作,取出数据;
C. 断开数据库连接。
使用这种模式开发,存在很多问题。首先,我们要为每一次请求(例如察看某一篇文章的内容)建立一次数据库连接。建立数据库连接的操作将是系统中代价最大的操作之一,很多时候,可能您的访问速度瓶颈就在于此。其次,使用传统的模式,你必须去管理每一个连接,确保他们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄露,最终我们不得不重启数据库。针对以上问题,先想到可以采用一个全局的Conneciton对象,创建后就不关闭,以后程序一直使用它,这样就不存在每次创建、关闭连接的问题了。但是,同一连接使用次数过多,将会导致连接的不稳定,进而导致SERVER的频频重启,故而,这种方法也不可取。实际上,我们可以使用连接池技术来解决上述问题。顾名思义,连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用,当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建;使用完毕后,只需放回内存即可。而连接的建立、断开都有连接池自身来管理。同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。通过使用连接池,将大大提高程序效率。
1实现连接池所籍类的设计
 本人设计的数据库连接池包括一个连接管理类DBConnectionManager和连接池类DBConnectionPool,其中连接管理对象负责提供与多个连接池对象(DBConnectionPool类)之间的接口。每一个连接池对象管理一组ODBC连接对象。
1.1连接池类DBConnectionPool提供以下功能
(1)从连接池获取(或创建)可用连接;
(2)把连接返回给连接池;
(3)在系统关闭时释放所有资源,关闭所有连接。
此外,DBConnecitonPool类还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不超过某个预定值。由此 ,我们可以定义出DBConnectionPool要完成管理所需要的基本接口:
class DBConnectionPool
{
 public DBConnectionPool( String name, String URL, String user,
 String password, int maxConn)
 public synchronized void freeConnection (Connection con)
 public synchronized Connection getConnection()
 public synchronized Connection getConnection (long timeout)
 public synchronized void release() //关闭所有连接
 private Connection newConnection() //创建新的连接
}
1.2连接池类DBConneetionPool的属性
m_ConnectionPoolSize:连接池中连接数量下限
m_Connectionpoolmax:连接池中连接数量上限
m_ConnectionUseCount:一个连接的最大使用次数
m_ConnectionTimeout:一个连接的最长空闲时间
m_MaxCoanections二一1:同一时fal的最大连接数
m -timer:定时器
这些属性定义了连接池与其中的每个连接的有效状态值。连接池的自我管理,实际上就是通过定时的对每个连接的状态、连接的数量进行判断而进行相应操作.
1.3连接管理类DBConnectionManager用于管理多个连接池对象,它提供以下功能:
(1)装载和注册ODBC驱动程序;
(2)根据在属性文件中定义的属性创建连接池对象;
(3)实现连接池名字与其实例之间的映射;
(4)跟踪客户程序对连接池的引用,保证在最后一个客户
程序结束时安全地关闭所有连接池。
 我们可以定义出DBConnectionManager要完成管理所需要的基本接口:
public class DBConnectionManager
{
static synchronized public DBConnectionManager getInstance()
private DBConnectionManager()
public void freeConnection (String name, Connection con)
public Connection getConnection (String name)
public Connection getConnection (String name, long time)
public synchronized void release()
private void createPools (Properties props)
private void init()
private void loadDrivers(Properties porps)
private void log (String msg)
private void log (Throwable e, String msg)
}

来源:qq19831030qq

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2011年2月2日
下一篇 2011年2月2日

相关推荐