在执行数据库SQL语句时,我们先要进行数据连接;而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术。它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池,当需要用到数据连接时,就从中取出一个连接,完成某些SQL操作后,系统自动回收,以供其它用户(或进程)调用。
我们知道,java标准的java.sql.Connection表示一个数据连接。我们封装了这个类,形成自己的数据库连接池。为了说明方便,这里用实际的类来显示:
DBConnectionPool 真正的数据连接池
DBConnectionManager 对多个池进行管理
之间的关系如下:实际执行过程:
1) 新建一个DBConnectionManager类的实例。
2) 然后调用DBConnectionManager. CreatePool()创建一个连接池,并把这个连接池加入到pools的HasthTable中。(这种过程可执行多次,对应不同的数据连接,可能是sql2k的,也可能是oracle的,但生成的DBConnectionPool都要放到pools中进行统一管理,用并用一个名字与相应的DBConnectionPool对应起来)。
3) 当需要数据连接时,首先得到一个DBConnectionPool,然后从DBConnectionPool中看有没有空闲的连接,如果有,则使用。如果没有,显没过最大连接数,则创建一个Connection连接,并返回这上连接。
4) 如果某个连接使用完毕,则调用DBConnectionManager.freeConnection(String name, Connection con),它又调用DBConnectionPool. freeConnection(Connection con),此时,连接并不真正释放,而是把这个暂时不用的Connection放到DBConnectionPool的freeConnections数组中,同时,通知其它正在等待连接的线程。这样,以后要用时,就不用再新建Connection。