关键词不能为空

当前您在: 主页 > 英语 >

一种简单JDBC连接池的实现

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-15 14:14
tags:

-

2021年2月15日发(作者:wish的用法)


一种简单


JDBC


连接池的实现



作者:未知



发布时间:


2005-05-12


< /p>


来源:


JSP


天空网




1.


前言





数据库应用,


在许多软件系统中经常 用到,


是开发中大型系统不可缺少的辅助。


但如果对数据库资源 没有很好地管理


(


如:没有及时回收数据库的游标


(ResultSet)



Statement


、连接



(Connection)


等资源


)


,往往会直接导致系统的稳


定。这类不稳定因素,不单单由数据库或者系统本身一方引起,只有系统正式

使用后,随着流量、用户的增加,才会逐步显露。






b


基于< /p>


Java


开发的系统中,


JDBC


是程序员和数据库打交道的主要途径,提


供了完备的数据库操作方法接 口。但考虑到规范的适用性,


JDBC


只提供了最


直接的数据库操作规范,对数据库资源管理,如:对物理连接的管理及缓冲,


期望第三方应用服务器


(Application Server)


的提供。





本文,以


JDBC

< br>规范为基础,介绍相关的数据库连接池机制,并就如果以简单


的方式,实现有效地 管理数据库资源介绍相关实现技术。





2.


连接池技术背景





2.1JDBC




JDBC


是一个规范,遵循


JDBC


接口规范,各个数据库厂家各自实现 自己的驱


动程序


(Driver)


,如 下图所示


:







应用在 获取数据库连接时,


需要以


URL


的方 式指定是那种类型的


Driver



在 获


得特定的连接后,可按照固定的接口操作不同类型的数据库,如


:


分别获取


Statement


、 执行


SQL


获得


ResultSet< /p>


等,如下面的例子



:




import .*;





..erDriver(


new .


Driver());


Connection dbConn = nection


(“jdbc:oracle:thin:@127.0.0.1:1521:




oracle”,“username”, “password” );



Statement st = Statement();


ResultSet rs = eQuery(



“select * from demo_table” );





some data source operation in ();


();();





在完成 数据操作后,还一定要关闭所有涉及到的数据库资源。这虽然对应用程


序的逻辑没有任何 影响,但是关键的操作。上面是个简单的例子,如果搀和众


多的


if-else



exception


,资源的管理也难免百密一疏。如同


C


中的内存泄漏问


题,


Java


系统也同样会面临崩溃的恶运。所 以数据库资源的管理依赖于应用系


统本身,是不安全、不稳定的一种隐患。





2.2JDBC


连接池





在标准


J DBC


对应用的接口中,并没有提供资源的管理方法。所以,缺省的资

< br>源管理由应用自己负责。


虽然在


JDBC


规范中,


多次提及资源的关闭


/


回收及其


他的合理运用。


但最稳妥的方式,

< br>还是为应用提供有效的管理手段。


所以,


JDBC


为第三方应用服务器(


Application Server


)提供了一个由数据库厂家实现的管


理标准接口:连接缓冲

< p>
(connection pooling)


。引入了连接池


( Connection Pool )


的概念



,也就是以缓冲池的机制管理数据库的资源。





JDBC


最常用的资源有三类


:




-Connection:


数据库连接。





-Statement:


会话声明。





-ResultSet:


结果集游标。





分别存在以下的关系










这是一种



?



-



-


子< /p>


?


的关系,对


Connection< /p>


的管理,就是对数据库资源的管


理。举个例子

:


如果想确定某个数据库连接


(Connection)


是否超时,则需要确定


其(所有的)子


Statement


是否超时,同样,需要确定所有相关的


Re sultSet



否超时;在关闭


Co nnection


前,需要关闭所有相关的


Statement



ResultSet






因此,连接池


(Connection Pool)

< p>
所起到的作用,不仅仅简单地管理


Connection

< br>,


还涉及到



Statemen t



ResultSet


< p>




2.3

< p>
连接池


(ConnectionPool)


与资源 管理





C onnectionPool


以缓冲池的机制,


在一定数量上限 范围内,


控制管理


Connection



Statement



Resul tSet



任何数据库的资源是有限的,


如果被耗尽,


则无法获得


更多的数据服务。

< br>




在大多数情况下,资源的 耗尽不是由于应用的正常负载过高,而是程序原因。





在实际工作中,数据资源往往是瓶颈资源,不同的应用都会访 问同一数据源。


其中某个应用耗尽了数据库资源后,意味其他的应用也无法正常运行。因 此,


ConnectionPool


的第一个任务是限制:每个 应用或系统可以拥有的最大资源。


也就是确定连接池的大小


(P oolSize)






ConnectionPool


的第 二个任务:在连接池的大小


(PoolSize)


范围内,最大 限度地


使用资源,缩短数据库访问的使用周期。许多数据库中,连接(

< br>Connection



并不是资源的最小单元,控制< /p>


Statement


资源比


Connec tion


更重要。以


Oracle


为例 :





每申 请一个连接



Connection



会在物理网络


(如


< br>TCP/IP


网络)


上建立一个用


于通讯的连接,


在此连接上还可以申请一定数量的


State ment



同一连接可提供


的活跃


Statement


数量可以达到几百。



在节约网络资源的同时,缩短了每次会


话周期

< br>(物理连接的建立是个费时的操作)



但在一般的应用中 ,


多数按照


2.1


范例操作,这样有< /p>


10


个程序调用,则会产生


10


次物理连接,每个


Statement


单独占用 一个物理连接,


这是极大的资源浪费。



ConnectionPool


可以解决这个


问题,让几十、 几百个


Statement


只占用同一个物理连接,

< p>


发挥数据库原有的


优点。





通过


Co nnectionPool


对资源的有效管理,


应用可以获得的


Statement


总数到达







(并发物理连接数)



x

< p>
(每个连接可提供的


Statement


数量)< /p>





例如某种数据库可同时建立的物理连接数为


< br>200


个,每个连接可同时提供


250

< br>个


Statement



那么< /p>


ConnectionPool


最终为应用提供的并发

< p>
Statement


总数为


: 200


x 250 = 50,000


个。


这 是个并发数字,


很少有系统会突破这个量级。


所以在本节


的开始,指出资源的耗尽与应用程序直接管理有关。





对资源的优化管理,很大程度上依靠数据库自身的


JDBC D river


是否具备。有


些数据库的


J DBC Driver


并不支持


Connection



Statement


之间的逻辑连接功


能,如


SQLServer


,我们只能等待她 自身的更新版本了。




< p>
对资源的申请、释放、回收、共享和同步,这些管理是复杂精密的。所以,


ConnectionPool


另一个功能就是,封装这些操作,为应用提供简单的,甚 至是


不改变应用风格的调用接口。




-


-


-


-


-


-


-


-



本文更新与2021-02-15 14:14,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/655403.html

一种简单JDBC连接池的实现的相关文章