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

摘 要 本文介绍了Java访问数据库的原理及其存在的问题,提出了解决办法-数据库连接池>数据库连接池,并对其要害问题进行了分析,构建了一个简便易用的连接池并结合当前热门技术Servlet说明了其如何在开发时使用。

  要害词 JDBC,jsp/Servlet,数据库连接池>数据库连接池,多数据库服务器和多用户,多线程

  引言

  近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机

  应用程序已从传统的桌面应用转到Web应用。基于B/S(Browser/Server)架构的3层开发模式逐渐取代C/S(Client/Server)架构的开发模式,成为开发企业级应用和电子商务普遍采用的技术。在Web应用开发的早期,主要使用的技术是CGI﹑ASP﹑PHP等。之后,Sun公司推出了基于Java语言的Servlet+Jsp+JavaBean技术。相比传统的开发技术,它具有跨平台﹑安全﹑有效﹑可移植等特性,这使其更便于使用和开发。

  Java应用程序访问数据库的基本原理

  在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,

  即Java语言通过JDBC技术访问数据库。JDBC是一种“开放”的方案,它为数据库应用开发人员﹑数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。JDBC提供两种API,分别是面向开发人员的API和面向底层的JDBC驱动程序API,底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实现与数据库的连接。

  一般来说,Java应用程序访问数据库的过程(如图1所示)是:

  ①装载数据库驱动程序;

  ②通过JDBC建立数据库连接;

  ③访问数据库,执行SQL语句;

  ④断开数据库连接。

 

图1 Java数据库访问机制

  JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用

  程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,假如程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

  数据库连接池>数据库连接池(connection pool)的工作原理

  1、基本概念及原理

  由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效治理。我们知道,

  对于共享资源,有一个很闻名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池>数据库连接池技术。数据库连接池>数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的治理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。连接池的基本工作原理见下图2。

 

图2 连接池的基本工作原理

  2、服务器自带的连接池

  JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。

  连接池要害问题分析

  1、并发问题

  为了使连接治理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为Java语言自身提供了对并发治理的支持,使用synchronized要害字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized要害字,如:

资料引用:http://www.knowsky.com/366202.html

http://www.knowsky.com/366202.html


http://www.niftyadmin.cn/n/1053021.html

相关文章

Introduction to BouncyCastle with Java

引自 1. Overview BouncyCastle is a Java library that complements the default Java Cryptographic Extension (JCE). In this introductory article, we’re going to show how to use BouncyCastle to perform cryptographic operations, such as encryption and signa…

雷林鹏分享:jQuery Mobile 表单选择菜单

jQuery Mobile 表单选择菜单 jQuery Mobile 选择菜单 Iphone 上的选择菜单:Android/SGS4 设备上的选择菜单: 元素创建带有若干选项的下拉列表。  元素内的元素定义了列表中的可用选项: 实例 Select Day Monday    Tuesday    Wednesday…

鸟哥的linux私房菜学习-(五)补充:重点回顾

为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力; 默认的图形模式登陆中,可以选择语系以及作业阶段。作业阶段为多种窗口管理员软件所提供,如GNOME及KDE等; …

[转]提高你的编码速度–Eclipse 快捷健

本文转自:http://xuezhongfeicn.blog.163.com/blog/static/22460141200911242523501/ Ctrl1 快速修复(最经典的快捷键,就不用多说了) CtrlD: 删除当前行 CtrlAlt↓ 复制当前行到下一行(复制增加) CtrlAlt↑ 复制当前行到上一行(复制增加) Alt↓ 当前行和下面一行交互…

java pdf转为image

转自 public static void convertPdf2Image(String pdfFilepath,String imgFilepath)throws IOException {File file;file new File(pdfFilepath);String filename file.getName().substring(0,file.getName().lastIndexOf("."));try {PDDocument doc PDDocument…

该公众号提供的服务出现故障,请稍后再试

"该公众号提供的服务出现故障,请稍后再试"解决对策:通过浏览器直接访问内网透射的url。比如:http://j3vd9j.natappfree.cc/jeewx-oschina发现提示:Tunnel j3vd9j.natappfree.cc not found。则说明内网透射有误。重新配置…

GC线程是不是守护线程

是 线程的话分为守护线程和非守护线程(即用户线程) 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作; 只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作,守护线程最经典的应用就是GC(垃圾回收器.) Java GC(Garbage Collection,垃圾收集,垃圾…

EJB应用从WebLogic到JBoss的迁移方法

摘要: 在不作任何改动的情况下,为WebLogic开发的应用无法在JBoss中部署,因为JBoss应用服务器的部署描述符有别于WebLogic的部署描述符。在本指南中,我们将通过把WebLogic部署描述符转换成JBoss部署描述符,把一个在WebLogic中开…