基于Java的数据库连接池技术研究

 基于Java的数据库连接池技术研究
张立仿.陈艳浩
(河南师范大学网络中心.河南新乡453007)
1引言
随着WEB技术的发展和电子商务时代的到来,人们希望建立能够根据需求生成页面、提供用户交互、提供后台数据库处理等
服务的动态网站。在此需求下,以Java技术为核心的JSP技术应运而生。JSP(Java Server Pages)技术是一项纯Java平台技术,是由
Sun公司倡导、多家公司共同参与制订的一项动态网页技术标准。JSP将Java作为其脚本语言,在传统的HTML文件中加入Java程
序片段和JSP标签,因此JSP也继承了Java语言的各种优点。同时JSP技术将页面设计与商务逻辑分离,区分了Web设计者和Web
开发者的角色。在使用JSP技术开发基于数据库的动态Web应用程序中,与数据库的交互已成为一个重要组成部分。与数据库的交
互过程中,数据库连接是一种重要的资源,数据库连接的管理性能会影响到整个应用程序的可伸缩性和健壮性。
本文主要对JSP与Web数据库连接的方法进行分析比较,并基于Tomcat用JavaBean构建了一个可重用的数据库连接池。
2 Java中传统的数据库连接技术
Java中连接数据库的技术是的JDBC。JDBC是一套用于执行SQL语句的Java AH,它由一组用Java语言编写的类和接口组成.
可以为多种关系数据库提供统一访问,其主要功能有建立数据库的连接、向数据库传送
SQL语句以及处理数据库返回的操作结果。JDBC提供了一种基准.据此可以构建更高级的
工具和接口,使数据库开发人员能够编写数据库应用程序。JDBC的体系结构如图1所示。
由图1可以看出,JDBC AH 屏蔽了不同数据库之间的差异.使程序设计人员有一个标
准的、纯Java的数据库程序设计接E1.为Java程序访问数据库提供技术支持.而驱动程序
管理器(JDBC Driver Manager)则为应用程序加载数据唪驱动程序(JDBC Driver)。数据库驱动
程序一般由数据库管理系统提供,用于向数据库提交‘SQL语句。
传统的基于JDBC的数据库访问方式一般有四种:JDBC—ODBC桥接驱动程序、本地
API部分Java驱动程序、数据库中间件的纯Java驱动程序、纯Java驱动程序。它们之间的
具体关系如图2所示
2.1 JDBC—oDBC桥接驱动程序
这类驱动将JDBC API作为到另一个数据访问API的映射来实现。
这类驱动程序通常依赖本地库,可移植性受到限制。JDBC—ODBC桥是
将JDBC操作转换为ODBC操作来实现JDBC操作,ODBC是目前应用
最为广泛的数据库访问API,因此通过JDBC—ODBC桥几乎可以连接任
何一种数据库,但是需要客户端预装ODBC驱动和配置ODBC数据源.
执行效率低,跨平台性差,常用于Windows平台下。
2.2 本地API部分Java驱动程序
这类驱动把对JDBC的调用转换成本地的API调用,通过数据库
请求把结果返回给JDBC驱动器,JDBC驱动器再将结果格式转化为
JDBC标准形式,并将结果返回给客户端。这种驱动执行效率比第一种
有所提高,但仍然需要在客户端加载数据哮厂商提供的代码库,不适合

2.3 数据库中间件的纯Java驱动程序
这种驱动程序将JDBC调用翻译成与数据库无关的网络协议,利用中间件将客户端连接到不同类型的数据库系统。使用这种驱
动程序不需要在客户端安装其他软件,并且能访问多种数据库。因此,这种驱动程序是与平台无关的,并且与用户访问的数据库无关.
特别适合在多层结构应用软件体系结构中使用。
2.4纯Java驱动程序
这类驱动也是完全由Java实现的,不需要加载任何软件或驱动,也不需要任何中介软件,直接把JDBC调用转换为符合相关数
据库系统规范的请求,与数据库服务器通信。这种驱动的执行效率是非常高,与平台无关,但与特定的数据库有关。
利用JDBC访问数据库的过程主要有如下四步:1)装载数据库驱动程序。2)访问数据库,执行SQL语句。3)处理数据库返回结果。
4)断开数据库连接。
通过研究以上过程,我们就会发现在使用以上方式开发web数据库应用的时候,存在很多问题。首先,每一次客户端的数据库
访问请求都要建立一次数据库连接。当众多用户访问web应用时,系统开销非常大。而且在一个基于数据库的web应用系统中.建
立数据库连接的操作是整个系统中占用资源最多的操作之一,造成网站速度瓶颈的根源也往往在于此。其次,使用传统的模式,必须
去管理每一个连接,确保它们能被正确关闭,如果程序异常而使某些连接未能关闭,最终将导致数据库系统中的内存泄漏,不得不
重启数据库。 、
为此,我们引入了数据库连接池技术来解决以上问题。
3 JDBC数据库连接池技术
数据库连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用,当程序中需要建立数据库连接时.只须从内
存中取一个来用而不用新建。使用完毕后只需放回内存即可,而连接的建立、断开都有连接池自身来管理f见图31。同时还可以通过
设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数,还可以通过其自身的管理机制来监视数据库连接的数量、
使用情况等,连接池的使用大大提高了程序效率。连接池的基本属性主要有:连接池中连接数量下限和上限、一个连接的最大使用
次数、一个连接的最长空闲时间、同一时间的最大连接数。这些属性定
义了连接池与其中的每个连接的有效状态值。连接池的自我管理,实际
上就是通过定时对每个连接的状态、连接的数量进行判断而进行相应
的操作。
当前国内的数据库连接池的解决方案主要是通过创建封装Driver
Manager的包DBConnection,通过该包来实现数据库连接的复用管理。
自JDBC2.0推出以后,一种优于Driver Manager解决方案已经出
现,它就是利用JDBC 2.0中的DataSource来实现数据库连接池,以替代
1.0中提供的Driver Manager类。DataSource是一个由JDBC驱动程序
P波Sc州。{ } 龄揣库 接池
( ) I/ i 、、~ ~ —


— — 一一
t b @ )
图3 连接池工作原理示意图
管理的包含数据库连接信息的数据对象,可以和JNDI Java Naming Directory Interface)命名服务协同工作,一个数据源对象注册到
JND1名字服务后,应用程序就可以从JNDI服务器上取得该对象,并使用它和数据源建立连接。这样与连接有关的信息就可以在
DataSource对象的属性中修改,无需改动使用这个数据源的应用程序,因此增强了应用程序的可移植性、可维护性。因为程序中不在
需要像使用Driver Manager那样给出硬性的驱动器名字f往往包含了特定厂商的名字)。
4用javabean实现连接池的访问
目前的JDBC驱动中基本都包含了DataSource接口的实现,但不少都没有包含基于DataSource的数据库连接池的实现,如SQL
Server 2000的JDBC驱动中就没有这种数据库连接池。但在当前的主流应用服务器上都包含了基于DataSource的数据库连接池的
实现。如:Weblogic、Websphere、Tomcat等。本文以Tomcat5.5+SQL SERVER 2000为平台来研究如何用JavaBean实现SQL SERVER
20o0数据库连接池。
首先将SQL SERVER 2000的JDBC的驱动文件(jar)放到Tomcat的common/lib目录下,然后配置Tomcat。
在Tomcat的serverv.xml和content.xml中配置如下示例代码:

4用javabean实现连接池的访问
目前的JDBC驱动中基本都包含了DataSource接口的实现,但不少都没有包含基于DataSource的数据库连接池的实现,如SQL
Server 2000的JDBC驱动中就没有这种数据库连接池。但在当前的主流应用服务器上都包含了基于DataSource的数据库连接池的
实现。如:Weblogic、Websphere、Tomcat等。本文以Tomcat5.5+SQL SERVER 2000为平台来研究如何用JavaBean实现SQL SERVER
20o0数据库连接池。
首先将SQL SERVER 2000的JDBC的驱动文件(jar)放到Tomcat的common/lib目录下,然后配置Tomcat。

  1. 在Tomcat的serverv.xml和content.xml中配置如下示例代码:
  2. <Resource
  3. name=。'jdbc/myds”
  4. type=”iavax.sq1.DataSource”
  5. driverClassName=”COrn.microsoft.jdbc.sqlserver.SQLServerDriver”
  6. password=”123456”
  7. maxIdle=”40”
  8. maxWait=”50o0”
  9. usem am e=”sa”
  10. url=”jdbc:microsoft:sqlserver://i27.0.0.1:1433;DatabaseName=down”
  11. maxActive=”100”/> .
  12. 编写JavaBean代码,核心javabean(connpoo1.java)代码如下:
  13. Package mytest;
  14. import javax.sq1.*;
  15. import java.sq1. ;
  16. import javax.naming. ;
  17. Public class connpoolf
  18. Public class eonnpool0{}
  19. Public ResuhSet ExecuteQuery(String sqlString)
  20. Try{
  21. Context ctx=new InitialContext0;
  22. Connection conn=null;
  23. DataSource ds=(DataSource)ctx.1ookup(”java:comp/env/jdbe/myds”);
  24. lcatch(NamingException e){
  25. System.out.println(“The excetion is NamingException!”)
  26. )
  27. Try{
  28. conn=ds.getConnection0;
  29. Statement stmt=conn.createStatement0;
  30. ResuhSet~=stmt.executeQuety(sqlString);
  31. }catch(SQLException e){
  32. System.out.prinln(“The excetion is SQLException!”)}
  33. Return rs;//返回查询后生成的结果集
  34. )
  35. 在web应用进行调用,部分示例代码如下:
  36. <jsp:useBean id=”pool”scope=”page”class=”mytest.connpool”/>
  37. <%
  38. strSQL=”select from data_table”:
  39. ResuhSet mt=poo1.executeQuery(strSQL);
  40. While(rs.next0)
  41. {
  42. }
  43. % >
复制代码

将连接池部分采用JavaBean的形式进行实现,这样不仅页面易于维护,而且代码也得到重用。JavaBean是经编译过的class文
件,源代码也得到保密。而且将用户名和密码封装在class文件内对数据库也起到安全保护作用。
5结束语
综上所述,通过连接池技术,Java开发人员可以更加高效地连接并操作各种数据库,而不需要单独为管理数据库的连接编写代
码,并大大降低了系统开销,提高了数据库访问的速度。笔者在开发实际的web应用中也发现,数据库连接池技术可使开发效率明
显得到提高,代码维护代价大大降低,访问效率也得到显著提高,使有限的计算机系统资源为更多的用户提供更加安全可靠的服务。

 

 

(本文来自:教程天下 www.nba114.com)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值