您当前位置:优侠库 > 资讯攻略 >
来源:未知
2019-10-11 17:44:11 浏览: 分类:资讯攻略

研究分析JDBC技术在数据库连接池上的应用

近年来,随着Internet/Intranet网络技术的快速发展及其在世界范围内的普及,计算机应用已经从传统的桌面应用转变为Web应用。基于B/S(浏览器/服务器)架构的三层开发模式逐渐取代了C/S(客户机/服务器)架构的开发模式,成为开发企业应用和电子商务广泛使用的技术。在Web应用开发的早期,使用的主要技术是CGI?ASP?Php等之后,Sun公司推出了基于Java语言的servlet+JSP+javaBean技术。与传统的开发技术相比,它是跨平台的?安全吗?有效?可移植性等特性,这使得它更容易使用和开发。

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

在Java语言中,JDBC(Java数据库连接)是应用程序和数据库之间的桥梁,

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

一般来说,Java应用程序访问数据库的过程是:

①加载数据库驱动程序;

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

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

④断开数据库。

作为一种数据库访问技术,JDBC简单易用。但是这种模式用于Web应用程序。

程序开发有很多问题:首先,每个Web请求都需要建立一个数据库连接。建立连接是一个耗时的活动,每次需要0.05s ~ 1s,系统还要分配内存资源。这一次,对于一个或几个数据库操作,你可能感觉不到系统有多大的开销。但是对于现在的Web应用,尤其是大型的电子商务网站,几百人甚至几千人同时在线是很正常的。在这种情况下,频繁的数据库连接操作必然会占用大量的系统资源,网站的响应速度肯定会下降,甚至会导致服务器崩溃。不是危言耸听,这是制约部分电商网站发展的技术瓶颈。其次,每个数据库连接都必须在使用后断开。否则,如果程序由于异常而无法关闭,数据库系统中的内存将会泄漏,最终数据库将不得不重新启动。况且这种开发控制不了创建的连接对象的数量,系统资源会毫无考虑的分配。如果连接太多,还可能导致内存泄漏和服务器崩溃。

数据库连接池的工作原理

1.基本概念和原则

从上面的分析可以看出,问题的根源在于对数据库连接资源的低效管理。

众所周知,对于共享资源有一个著名的设计模式:资源池。这种模式只是为了解决资源的频繁分配?发布导致的问题。为了解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想是建立一个“缓冲池”。提前在缓冲池中放置一定数量的连接。当你需要建立一个数据库连接时,你只需要从"缓冲池"中取出其中的一个,用完后放回去。我们可以通过设置连接池中的最大连接数来防止系统无休止地连接到数据库。更重要的是,我们可以通过连接池的管理机制来监控数据库连接的数量?用法,用于系统开发?并为测试性能调整提供依据。

2.服务器附带的连接池

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

连接池的关键问题分析

1.并发问题

为了最大化连接管理服务的通用性,我们必须考虑多线程环境,即并发性。这个问题相对容易解决,因为Java语言本身提供了对并发管理的支持,使用synchronized关键字可以保证线程同步。方法是直接在类方法前面加上synchronized关键字,例如:

公共同步连接getconnection()

2.多数据库服务器和多用户

对于大型企业应用程序,经常需要同时连接不同的数据库(如oracle和Sybase)。如何连接不同的数据库?我们的策略是:设计一个符合singleton模式的连接池管理类,在创建连接池管理类的唯一实例时读取一个资源文件,其中多个数据库的url地址存储在资源文件()中?用户名()?密码()等信息。例如tx . URL = 172 . 21 . 15 . 123:5000/tx _ it,tx.user=yang,tx.password=yang321。根据资源文件提供的信息,创建连接池类的多个实例,每个实例是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名称,并通过不同的名称管理不同的连接池。

如果同一个数据库被多个用户名和密码不同的用户访问,也可以按资源文件处理,即可以在资源文件中设置多个url地址相同但用户名和密码不同的数据库连接信息。

3.交易处理

我们知道,事务是原子性的,所以要求数据库的操作符合“ALL-ALL-NOTHING & quot;原则,即对一组SQL语句做全部或者什么都不做。

在Java语言中,Connection类本身提供了对事务的支持,这可以通过将Connection的AutoCommit属性设置为false,然后显式调用Commit或rollback方法来实现。然而,为了有效地重用连接,我们必须提供相应的事务支持机制。可以通过每个事务的独占连接来实现,可以大大降低事务管理的复杂度。

本文链接:http://www.123down.cn/gonglue/227394.html

攻略资讯
安卓软件
安卓游戏