JDBC数据库连接池的研究与实现
2010-04-12刘娟
刘 娟
蚌埠学院计算机科学与技术系,安徽 蚌埠 233000
0 引言
使用JDBC访问数据库时,先加载相应驱动,接着创建连接对象,向连接对象发送SQL语句访问数据库,使用完毕后关闭连接对象。普通WEB应用访问数据库的频率低,可以满足要求。但如果客户端数量非常多,系统会不断创建、关闭连接,频繁进行内存操作,影响系统性能。另外,程序异常可能导致系统不能及时释放连接对象,产生内存泄露,导致内存资源耗尽。为了解决这些问题,可以采用连接池技术,从而减少不必要系统开销,避免内存泄露,提高系统性能。
1 连接池原理
连接池技术原理是预先创建容器对象,并放入一些连接对象。需要使用连接对象时,直接从连接池中获取。用完后不关闭连接对象,将其放回连接池。连接池可以通过设置最少连接数和最大连接数来保持可用对象数量和避免无限制使用连接对象。
2 连接池设计
1)建立连接池。连接池的基本功能就是管理连接对象。创建连接池时,可以预先分配指定数量的连接对象放入集合类中,分配和释放都将对集合类进行操作,可以减少由频繁内存操作带来的系统开销。
2)获取与释放连接对象。需要连接对象时,先获取连接池中空闲连接对象,没有则获取某个连接对象进行复用。这里采用的复用技术为引用计数法。引用计数表示资源使用者的数量。首先为每个连接对象提供一个引用计数,初始化引用计数为0,使用时引用计数加1。连接对象使用完毕,引用计数减1。若引用计数为0,则表示连接对象处于空闲状态,将其放回连接池中,等待再次使用。
3)定时管理。定时检查连接池内连接对象状态,更好地保证连接池稳定。当连接对象数量少于预定数量,向连接池内添加新对象。遍历每个对象,处于关闭状态,则释放其所占内存。如果处于空闲状态,通过其空闲时间来决定是否关闭。如果处于使用状态,通过其使用时间来选择是否关闭。
4)事务处理。进行数据库事务处理,需符合“All or Nothing”原则。连接对象复用时很难保证事务处理的原子性。这里采取给连接对象增加标识是否进行事务处理属性。如果是则不允许复用。
5)并发处理。同一时刻可能会有多个线程访问连接对象,JAVA中使用synchronized关键字可以保证多线程操作同步。
6)多连接池设计。某些系统需要多用户连接多数据库,就需要同时管理多个连接池。可以采用配置文件来配置和管理多个连接池。
3 连接池实现
本文在实现连接池时,主要包含两部分:连接池类(CConnPool)、连接池管理类(CConnManager)。
连接池类主要提供创建连接池、获取可用连接对象、回收连接对象、定时管理连接池、关闭连接池等接口。其主要属性和方法为:
连接池管理类主要实现加载相应JDBC驱动、加载配置文件、创建连接池、获取与回收连接对象。其主要属性和方法为:
4 结论
连接池降低了内存操作频率,优化了数据库访问接口,提高了系统性能。当然,对连接池进行优化不仅有这些技术,还需要考虑到对Statement和Resultset对象的优化,有待于进一步研究。
[1]布雷恩·赖特著.JSP数据库编程指南[M].赵明昌,译.北京:希望电子出版社,2001.
[2]Maydene Fisher,等.JDBC API Tutorial andReference,3rd Edition[M].Addison Wesley,2003.