基于JDBC的数据库连接池技术的研究与应用

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wudi120
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文介绍了基于JDBC的数据库连接池的工作原理,提出了一个高效的连接管理策略,最后给出了数据库应用的具体实现。
  关键词:JDBC;数据库;数据库连接池
  中图分类号:TP311.13 文献标识码:A 文章编号:1009-3044(2009)15-3859-02
  
  Improvement and Application of Database Connection Pool Technology Based on JDBC
  DAI Wei-wei
  (Shao Xing Science and Artist School Computer Center,Shao Xing 312000, China)
  Abstract: The article descrbs the working principle of database connection pool based on JDBC,Offers a high-efficient connection to manager the tactics in practical application. At last Gives the concrete realization of database applications.
  Key words: JDBC; database; database Connection Pool
  
  1 引言
  
  随着网络的发展,各种网站越来越多。而对于基于数据库的Web系统来说,数据库连接是增加系统开销的主要原因之一,它的好坏直接影响到数据库服务器的性能。传统的数据库连接是在主程序(如Servlet、Beans)中建立数据库连接,然后进行SQL操作取出数据,最后结束时断开数据库连接。这就使得每次用户的请求都需要建立一次数据库连接,这就大大地增加系统开销,并且降低数据库服务器的性能。此外,采用传统的连接方式,需要你去管理每一个连接,并确保他们能被正确关闭,如果出现程序异常而导致某些连接未能正常关闭,这将导致数据库系统中的内存泄露,最终我们将不得不重启数据库。由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。这就需要引入一种高效率的资源管理机制来解决该问题。
  
  2 基于JDBC的传统数据库访问机制
  
  JDBC(Java Database Connectivity)是Java与数据库的接口规范,它由一组用Java编程语言编写的类和接口组成。它可分为两类:面向开发人员的JDBC API和面向数据库开发商的底层的JDBC driver API。而JDBC驱动程序由实施了这些接口的类组成。
  下面先介绍Java语言通过JDBC技术访问数据库的过程。
  ①装载JDBC驱动程序;
  ②获得JDBC数据库连接;
  ③创建Statement对象;
  ④执行SQL语句;
  ⑤处理结果;
  ⑥关闭数据库连接。
  分析以上内容,我们可以这样理解:用户每次的访问都需要向数据库服务器提出连接请求,而且每次使用后都要关闭。这使得数据库连接效率极低。
  下面将介绍一种高效率的资源管理机制—数据库连接池。
  
  3 数据库连接池的工作原理
  
  数据库连接池的实现原理就是为数据库连接建立一个“缓冲池”,预先在这个"缓冲池"中放入一定数量的数据库连接,当应用程序需要时,就从“缓冲池”中取出一个连接,使用完后再放回“缓冲池”中。同时我们通过设置连接池最大连接数来防止系统无穷无尽地与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。连接池主要包括三个方面:连接池的建立、管理和关闭。下面将主要讨论它们及连接池的配置。
  3.1 建立连接池
  在系统初始化时根据连接配置文件Connections.properties建立连接池并创建一定数量的数据库连接,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。以后所使用的连接都是从该连接池中获取的。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等。
  3.2 连接池的管理
  连接池管理是连接池机制的核心,对系统的性能有很大的影响。当连接池建立后,如何对连接池中的连接进行管理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。
  連接池管理是采用两级连接池一空闲池和使用池。空闲池中存放目前还没有分配出去的连接,一旦一个连接被分配出去,它就会被放入到使用池中,并且增加引用记数。这里的引用记数(ReferenceCounting)是一种对于复用资源广泛使用的设计模式。我们把该方法运用到对于连接的分配释放上。每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。
  具体的实现方法是:
  当用户请求数据库连接时,首先检查空闲池内有没有空闲的连接(是指未分配的连接),如果有就把建立时间最长的连接分配给他,在此先判断该连接是否有效即引用记数是否小于可用次数(ConnectionUseCount),如果小于就分配给用户,否则就把该连接从空闲池中删掉,重新检查空闲池是否有连接;
  如果没有连接则检查当前所开连接池是否达到其最大的连接数,如果没有达到,就按设定的WaitConnectionTime(最大等待时间)进行等待一段时间;如果达到就,如果达到则如果没达到就重新创建一个连接给请求的用户。如果等待WaitConnectionTime后仍没有空闲连接,则返回空值(NULL)给用户。如果在等待的时间里,有连接被释放出来就可以把这个连接分配给等待的用户。
  如果存在则取出可用连接对该连接把连接分配给客户并作相应处理(即标记该连接为正在使用,引用记数加1);如果没有空闲连接,则查看当前所开的连接数是不是已经达到MaxConnections(最大连接数)。
  释放数据库连接时要做三件事:首先有一个等待,询问本次连接中是否还有同一事务的其他SQL语句,如有则接着本次连接继续操作;如无则计算该连接对象的引用次数并判断是否超过了该连接的可用次数,如果超过就从连接池中删除该连接,以防止同一个连接使用次数过多,导致连接不稳定,否则就将该连接放入空闲池并设置为空闲状态,可供再次复用;最后检查当前连接池内空闲连接数是否小于MinConnections(最少连接数),若小于就新建若干个空闲连接,使连接池动态地保持一定量的空闲连接;否则关闭该连接。我们可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。
  3.3 连接池的关闭
  当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。
  3.4 连接池的配置
  数据库连接池到底要放置多少个连接,这是个配置策略。这里的配置策略是:根据具体的应用需求,给出一个初始的连接池连接数目以及一个连接池可以承受的最大连接数目。本方案就是按照这个策略实现的。
  
  4 数据库连接池的具体实现
  
  从连接池的基本原理可以发现,一个连接池在创建和管理的过程中是由一组基本属性和接口来控制的。它们控制着连接池和每个连接对象的有效状态值,同时也影响着连接池的性能。基本方法如下:
  Public class DBConnectionsPool {
  MinConnections:初始化时连接池建立的最少连接数,即连接池动态维持的空闲连接数;
  MaxConnections:连接池中最大连接数;
  ConnectionUseCount:一个连接的最大使用次数;
  WaitConnectionTime :等待分配空闲连接的最大等待时间;
  Connections:当前的连接数即动态维持的连接数;
  WaitReleaseTime:连接释放前的等待时间;
  Public Synehronized void freeConnection(Connection con)//将连接返回给连接池
  Public Synehronized Connection getConnection()//从连接池获得可用连接
  Public Synehronized Connection getConnection(long maxWaitTime)//从连接池获取可用连接,并指定客户程序能够等待的最长时间。
  Private Connection newConnection()//創建新连接
  Public synehronized void release()//关闭所有连接。
  }
  Public class DBConnectionManager{
  GetInstance()方法//访问连接池的唯一实例
  Private DBConnectionManager()//建构函数私有以防止其它对象创建本类实例
  GetResourceASStream()方法//用于定位并打开外部文件
  Connections.properties//属性文件,它包含定义连接池的键一值对。
  LoodDrivers()方法//实现装载和注册所有在drivers属性中指定的JDBC驱动程序
  CreatePools()//创建连接池对象。
  Hashtable类//实现连接池名字到连接池对象之间的映射。
  public void freeConnection(String name, Connection con)// 释放一个连接,//name是一个连接池对象的名字
  public Connection getConnection(String name)//从名字为name的连接池对象//中得到一个连接
  public Connection getConnection(String name, long time)//从名字为name的连接池对象中取得一个连接,time是等待时间
  }
  对于大型的企业级应用,常常需要同时连接不同的数据库(如连接Oracle和Sybase)。我们先建立配置文件并且存放多个数据库的基本信息,然后通过读取文件的信息来分别创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。当所连接的数据库服务器有改动时,通过重新设置配置文件,可以连接各种数据库服务器。连接池初始化之前,首先读入配置文件,下面介绍一个关于SQL 2000的例子:
  jdbc.drivers= com.microsoft.jdbc.sqlserver.SQLServerDriver
  jdbc.url= jdbc:microsoft:sqlserver://localhost:3306/corejava
  jdbc.username=dww
  jdbc.password=123456
  
  5 结束语
  
  在使用JDBC进行与数据库连接有关的应用开发中,对于众多用户访问的Web应用,采用数据库连接池技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。该文在原有的JDBC上提出一个合理、高效的数据库连接池的设计与实现,避免了对于连接的任意、无规则的使用,使得数据库连接可以得到高效安全的复用,提高系统的效率。
  
  参考文献:
  [1] 梁立新.项目实践精解:Java Web应用开发[M].北京:电子工业出版社.2007.
  [2] 王秀义.基于JDBC的数据库连接池及实现[J].计算机系统应用,2004,(4):36-39.
  [3] 成培,李峰,王畅.连接池数据库访问技术深入研究[J].计算机工程与设计,2007,(28):509-511.
  [4] 商杰,朱站立.数据库连接技术研究与应用[J].现代电子技术,2007.(5):95-97.
  [5] 王士信,喻国平.基于JSP的数据库连接池及其应用[J].微计算机信息,2008,(24):137-138,152.
其他文献
摘要:该文介绍了为满足学生评价工作而设计的基于web技术的学生评价系统,并对此系统的需求、总体进行了设计分析。对提高管理学生评价工作的效率具有深刻的意义。  关键词:Web技术;系统实施;需求分析   中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)10-2224-02  随着教育事业及网络的不断发展,学校的各种机制越来越完善,信息管理趋于网络化、信息化。学生数量庞大,
期刊
摘要:随着我国教育改革的不断深入,对于教学所用的材料和资源的认识也在不断调整,数字化教学资源的“服务性”表征也越来越强,成为为教学服务、引导学生认知发展、生活学习、价值观建构的媒介。该文以清远职业技术学院为例,针对高职院校数字化教学资源建设调查及对策进行论述,希望能进一步促进高职院校数字化教学资源建设。  关键词:数字化教学资源;清远职业技术学院;调查;对策  中图分类号:G642文献标识码:A文
期刊
摘要: 该文提出了一种解决物联网通信安全的中间件系统设计方案。重点分析了物联网的组成要素和安全隐患,及中间件系统在物联网安全通信中的关键作用,提出了通过构建中间件系统解决物联网通信安全问题的设计及实施方法。笔者多年来从事计算机安全方面相关工作,综合计算机科学,自动控制,通信技术相关学科知识,提出此中间件模型,以期为物联网安全问题提供部分解决方案。  关键词:物联网;RFID;中间件  中图分类号:
期刊
摘要:通用串行总线(USB)是一种简单的计算机外围接口标准。它具有即插即用、扩展方便等优点,已成为计算机必备的一个接口。该文介绍了oHcI数据四种传输类型之一的B ulk传输,并对Bulk传输的IN/OUTToken进行研究。然后描述在调试Massstorage设备初始化过程中碰到的一个因OHCI Bulk传输而引起的问题,针对该问题进行分析,利用各种调试工具解决问题,文章最后总结了解决问题的心得
期刊
摘要:建构主义理论认为,学生的学习再也不是由教师把知识简单地传授给学生,而是由学习的主体——学生自己去主动地建构知识、获取知识。采用了任务驱动,改革了课程评价模式,实现了全员参与课堂、以学生为主体。  关键词:以学生为主体;多媒体技术;lllustrator;任务驱动  中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2010)23-6613-02
期刊
摘要:通过实例介绍了Madab在微分、积分学中的应用,展示了Madab在高等数学计算机辅助教学中的强大功能。  关键词:Matlab;微分;积分;辅助教学  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2010)23-6637-03
期刊
摘要:在研究了μCOS-II实时操作系统体系结构、运行环境及运行机制基础上,针对Cortex-M3内核的移植需求, 对μCOS-II实时操作系统在Cortex-M3核上的移植进行了实践。同时分析了μCOS-II在Cortex-M3上的移植条件,编写及修改了移植环境的定制与配置,实现了μCOS-II在Cortex-M3上的移植,最后给出了一个基于μCOS-II嵌入式实时操作系统的简单应用。  关键词
期刊
摘要:数据库是企业信息系统运转的核心,同时数据库也是黑客攻击的主要目标,因此,研究一种有效的数据库加密技术对企业的信息安全十分重要。介绍了SQL Server数据库的安全问题和常见的数据库加密技术,提出了一种针对于数据库列的内部加密技术。实验结果表明,针对列的内部加密技术不仅能够取得理想的保密效果,同时也得到了最优化的数据库运行性能。  关键词:SQL Server;数据库;加密  中图分类号:T
期刊
摘要:近期校园网内频繁爆发一种叫ARP木马的网络病毒。严重影响了校园网的稳定和安全。该文介绍了ARP协议的工作过程以及ARP欺骗的原理,并提出了切实有效的防治ARP病毒的方法。
期刊
摘要:元数据作为一种编码体系,在数据管理中占据着重要的地位。本文从元数据的概念、相关格式、携带工具(RDF),以及XML的相关概念入手,探讨了元数据的资源描述框架(RDF)及其在数字图书馆和数字博物馆中的应用。  关键词:XML;元数据;RDF  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2009)15-3849-03    Base on Metadata Relev
期刊