![[计算机]关于如何使用JSP访问Oracle数据库的方法.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/2bf2ac61-707d-4970-b217-7eecb3d267b2/2bf2ac61-707d-4970-b217-7eecb3d267b21.gif)
![[计算机]关于如何使用JSP访问Oracle数据库的方法.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/2bf2ac61-707d-4970-b217-7eecb3d267b2/2bf2ac61-707d-4970-b217-7eecb3d267b22.gif)
![[计算机]关于如何使用JSP访问Oracle数据库的方法.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/2bf2ac61-707d-4970-b217-7eecb3d267b2/2bf2ac61-707d-4970-b217-7eecb3d267b23.gif)
![[计算机]关于如何使用JSP访问Oracle数据库的方法.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/2bf2ac61-707d-4970-b217-7eecb3d267b2/2bf2ac61-707d-4970-b217-7eecb3d267b24.gif)
![[计算机]关于如何使用JSP访问Oracle数据库的方法.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/2bf2ac61-707d-4970-b217-7eecb3d267b2/2bf2ac61-707d-4970-b217-7eecb3d267b25.gif)
已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Error! No text of specified style in document.如何使用JSP访问Oracle数据库本章内容l 数据引擎JDBCl 通过JDBC-ODBC访问Oracle数据库l 使用JDBC访问数据库l 使用JavaBean模式访问数据库l 使用连接池访问数据库l 其他典型JSP数据库访问本章目标l 熟悉JDBC数据引擎技术,掌握其在Windows下的配置和使用方法l 掌握JavaBean+JSP访问Oracle数据库的方法8.1 数据引擎JDBC数据库连接对动态网站来说是最为重要的部分,Java中连接数据库的技术是JDBC(Java Database Connectivity)。JDBC是一种可用于执行SQL语句的Java API,它为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。在了解JDBC之前,有必要了解一下Microsoft公司制订的统一数据库编程接口的解决方案,即ODBC(Open DataBase Connectivity,开放式数据库互连)。Microsoft推出的ODBC技术为不同数据库的访问提供了统一的接口。ODBC在不同的数据库各自的驱动之上建立了一组对数据库访问的标准API,这些API利用SQL语句来完成其大部分任务。数据库的ODBC驱动程序负责所有的底层数据库访问操作,然后给上层的应用程序提供统一的编程接口,上层的应用程序只需调用ODBC的统一编程接口就能与数据库打交道。因此,基于ODBC的应用程序对数据库的操作不依赖于具体的数据库,不论是Access,SQL Server、DB2还是Oracle数据库,均可以用ODBC API进行访问,程序代码都完全相同,也就是说,ODBC能以统一的方式处理所有的数据库。ODBC可以为不同的数据库提供相应的驱动程序。对于Microsoft公司自己的数据库产品,比如SQL Server和Access,在Windows操作系统里内置了支持这些数据库的ODBC驱动程序,而对于其他公司的数据库产品,则需要安装相应的ODBC驱动程序。ODBC数据源是作为数据源使用的数据库或数据库服务器。在数据库应用程序中,通过ODBC数据源来连接数据库。在连接数据库之前,要在Windows的控制面板中使用ODBC管理程序来注册这个数据源。ODBC驱动程序是一个动态链接库,它将数据源与应用程序相连接。ODBC在数据库技术发展的过程中占有极其重要的地位,它如此成功,以至于成为当时数据库技术中的一个标准。但是ODBC对数据库的兼容性是以效率的降低为代价的,ODBC可以看作是在数据层和应用程序之间的一个中间层,因此利用ODBC访问数据库的效率要低于直接通过数据库专用驱动的访问。ODBC最大的问题不是效率,而是平台的支持,这是因为ODBC产生于Windows操作系统,只有在Windows平台下才能得到最好的支持。最初的Java应用程序也是通过ODBC连接数据库的,由于ODBC的API是使用C语言进行调用的,这就使得Java的许多优秀特性无法充分发挥,比如平台无关性、面向对象的特性等。基于这些技术上的缺陷,Sun公司不失时机地推出了具有Java语言特性的独有的数据库解决方案JDBC。JDBC在继承ODBC接口与具体数据库无关的设计理念的基础上,进一步利用了Java语言的平台无关性,使得程序员可以轻松利用JDBC的API对数据库进行操作,从而编写出真正不依赖于具体数据库、具体操作平台的代码。这些JDBC的API就是Java基础类库中的java.sql包,任何一个需要访问数据库的Java应用程序都需要导入这个包。Java应用程序通过JDBC接口访问数据库有5种具体的底层处理机制。(1)JDBC-ODBC桥结合ODBC驱动程序一个JDBC-ODBC驱动程序提供了能够访问一个或多个ODBC驱动程序的JDBC API,它是一个本地的解决方案。这种方式将JDBC请求转换为ODBC请求,因此在每一个数据库的客户端都必须安装ODBC驱动,这种方式不适合远程访问数据库。(2)原生API结合Java驱动程序这种方式同样也是一种本地解决方案。它将对JDBC API的调用转换为对Oracle、SQL Server、Sybase等其他数据库客户端API的调用,因而每个客户端上要安装对应于具体数据库的驱动程序。(3)网络协议结合纯Java驱动程序这种方式通过一个服务器将JDBC API调用转换为中间网络协议发送给网络上的另一个服务器,然后再由这个服务器将这种中间网络协议转换为对指定数据库系统的调用。这里,中间网络协议起到一个读取数据库的中间件的作用,能够连接许多类型的数据库,而在客户端上无须安装特定的数据库驱动,因而是最灵活的JDBC模式。这种驱动程序适合于通过Internet访问数据库,但要考虑安全认证的问题。(4)原生协议结合纯Java驱动程序这种驱动程序一般由数据库厂商实现。它将Java API的调用转换为指定的数据库系统使用的网络协议。这种驱动程序使用的中间转换最少,而且一般都是由数据库厂商直接提供的,因此使用起来稳定性最高。(5)JDOJDO(Java Data Object)是Sun公司新推出的一个访问数据库的API,它定义了新的数据存取的模型。JDO的实现方式是在JDBC技术的基础上进行封装,将数据库相关的JDBC连接细节封装隐藏起来,使程序员在设计连接数据库的应用程序时只需关注创建那些实现商业逻辑的类和用它们来表现数据源的数据,而这些类和数据源之间的映射则由专家来完成,这样一来就给开发数据库的程序员带来了极大的便利。纵观上面这5种使用JDBC接口访问数据库的驱动机制,后3种驱动是比较理想的选择,而前两种驱动是用Java访问数据库时最常用的方式。一般来说,Java应用程序访问数据库的过程(见图8.1)如下。装载数据库驱动程序。通过JDBC建立数据库连接。访问数据库,执行SQL语句。断开数据库连接。图8.1 JDBC的数据库访问机制JDBC的功能十分强大,而且得到了绝大部分数据库厂商的支持,数据引擎的称号对JDBC来说是当之无愧的。8.2 通过JDBC-ODBC访问Oracle数据库JDBC-ODBC桥作为JDBC API访问具体数据库的中间环节,是使用JSP访问数据库常用的一个办法。这里,我们以一个在Windows XP系统下访问Oracle 10g的实例来讲解如何在JSP中使用JDBC-ODBC桥结合ODBC驱动程序的机制来访问数据库。8.2.1 创建ODBC数据源如果要通过ODBC访问数据库,就必须为建立好的数据库添加一个数据源以便与应用程序交互。每一个ODBC数据源对应于某一个数据库系统中一个指定的数据库。比如要以SCOTT用户身份访问myorc数据库中的emp表,这时,就要为数据库myorc建立一个数据源。在Windows系统中为myorc数据库建立一个ODBC数据源的步骤如下。(1)在控制面板的“管理工具”中,双击打开“数据源(ODBC)”,在弹出的【ODBC数据源管理器】对话框中,选择【系统DSN】选项卡,如图8.2所示,(2)单击【添加】按钮,弹出【创建新数据源】对话框,如图8.3所示,在对话框中选择“Oracle in OraDb10g_home1”。(3)单击【完成】按钮,弹出Oracle ODBC Driver Configuration对话框,如图8.4所示,在Data Source Name一栏中填入数据源名“myOracle_conn”;在TNS Service Name下拉列表框中选择数据库“MYORC”;在User栏中输入用户名“scott”。其他选项保持默认。(4)单击Test Connection按钮,测试当前设置是否能成功连接Oracle,在弹出的Oracle ODBC Driver Connect对话框中输入以SCOTT身份登录MYORC数据库的密码,如图8.5所示。图8.2 【ODBC数据源管理器】对话框 图8.3 选择Oracle in OraDb10g_home1图8.4 配置数据库信息 图8.5 输入密码(5)单击OK按钮,如果弹出如图8.6所示的提示对话框,则说明我们已成功配置。(6)单击【确定】按钮,返回Oracle ODBC Driver Configuration对话框,继续单击OK按钮,就会看到在【ODBC数据源管理器】对话框中添加了一个名为myOracle_conn的数据源,如图8.7所示。图8.6 配置成功的提示信息图8.7 完成数据源myOracle_conn的创建工作(7)在图8.7中单击【确定】按钮,至此ODBC数据源的创建工作结束。8.2.2 编写JSP测试程序既然已经完成了数据源myOracle_conn的创建工作,下面就要开始编写访问数据库的JSP程序了。由于我们采用JDBC-ODBC桥的方式进行访问,因此就不需要再安装JDBC驱动了,因为JDBC-ODBC驱动程序是由JDK系统自带的。下面的程序清单显示了如何通过JDBC-ODBC桥来访问数据库。在Eclipse中创建一个J2EE项目,名称为“odbc_test”,然后新建一个名为“Test_jdbc.jsp”的文件,输入以下代码。【代码8.1】Test_jdbc.jsp通过JDBC-ODBC桥访问数据库通过JDBC-ODBC桥访问数据库员工号姓名工作性质所属领导编号入职时间薪资奖金部门编号这个JSP程序用来从数据库myorc中读出所有的信息,并在浏览器中将这些信息以一张表的形式显示出来。在Eclipse中启动Tomcat服务器,在浏览器的地址栏中输入:http:/localhost:8089/odbc_test/Test_jdbc.jsp运行这个JSP程序,结果如图8.8所示。图8.8 通过JDBC-ODBC桥访问数据库8.2.3 JDBC编程详解上面这个JSP实例给我们展示了如何使用JDBC的编程语句对数据库进行访问。接下来我们将深入JDBC内部,详细介绍它们的作用以及具体用法。1. 导入java.sql包所有与数据库有关的对象和方法都在java.sql包中,包java.sql包含了用Java操纵关系数据库的类和接口。因此在使用JDBC的程序中必须要加入“import java.sql.*”。2. 加载驱动程序在JDBC连接到ODBC数据库之前,必须要加载JDBC-ODBC桥驱动程序:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);这里,使用了Class类(java.lang包)中的方法forName,来装入该驱动程序的类定义sun.jdbc.odbc.JdbcOdbcDriver,从而创建了该驱动程序的一个实例。3. 连接数据库完成上述操作后,就可以连接一个特定的数据库了。这需要创建Connection(java.sql包)类的一个实例,并使用DriverManager(java.sql包)的方法getConnection来尝试建立用url指定的数据库的连接。下面是JDBC与数据源myOracle_conn相连接的代码:String url = jdbc:odbc:myOracle_conn;String username = scott;String password = scott;Connection con = DriverManager.getConnection(url, username, password);这里,java.sql.Connection类用于管理JDBC与数据库之间的连接,它还提供了对SQL语言的支持,以便操纵数据库进行事务处理。java.sql.DriverManager类是驱动程序管理器,其方法getConnection用来建立与url指定的数据库的连接,它的第一个参数是数据源的url,后面两个参数分别为数据源的用户名和密码。数据源的url的作用是定位一个数据库以便使驱动程序能够找到这个数据库并与其进行连接,它的格式如下:协议标识:驱动程序标识:数据库标识其中:协议标识总是“jdbc”;驱动程序标识代表所使用的驱动程序协议名;数据库标识是数据库的定位方式,它根据驱动程序协议的不同而有所不同。比如在ODBC的协议下,数据库标识就是ODBC数据源的名称,而在dbnet的协议下,它是一个表示数据库位置的url。在我们这个实例中,采用JDBC-ODBC桥的方式连接数据库,因而驱动程序标识为“odbc”,数据库标识就是实例中创建的那个ODBC数据源myOracle_conn,由此方法getConnection中的第一个参数url就要设置为url=“jdbc:odbc:myOracle_conn”。4. 访问数据库连接到数据源MyOracle_conn以后就可以访问数据库了。这需要先用Connection类对象的createStatement方法从指定的数据库连接得到一个Statement(java.sql包)的实例,然后用这个实例的executeQuery方法来执行一条SQL语句。代码如下:Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(select * from Users);这里,java.sql.Statement类用来向数据库递交查询或修改请求。Statement.executeQuery()用来执行一条SQL语句的查询结果。如果要对数据库中的记录进行修改,则要使用Statement.updateQuery()方法。java.sql.ResultSet类用来保存SQL语句的执行结果,还可以存取结果中的数据。对数据库的查询或修改等操作将返回一个包含了查询结果的ResultSet对象。5. 获取数据库记录中的字段值ResultSet对象是JDBC中比较重要的一个对象,几乎所有的查询和修改等操作都将数据作为ResultSet对象返回。Result包含任意数量的命名列,可以按名称访问这些列,它还包含一个或多个行,也可以按顺序自上而下逐一访问这些列。下面是访问并显示数据源MyOracle_conn的代码:这里,rs.next()方法用来得到数据结果中的下一条记录。在进行前面的查询操作之后,得到的ResultSet中的指针指向第一条记录之前的一个位置,因此先要调用一次next方法使指针指向第一条记录。Next方法返回一个boolean值,表示能否定位下一条记录,如返回值为false,则表示不存在更多的记录,否则就可以提取下一条记录。rs.getString方法用来得到当前记录中的某一字段的值,返回类型为String,其他的方法还有getFloat()、getInt()的等。注意,所要读取的字段名应该与数据库内的相应字段名完全一致,包括大小写也要一致。6. 关闭数据库连接,释放资源对数据库的操作完成之后,要及时关闭ResultSet对象和数据库连接对象Connection,从而释放占用的资源,这就要用到close的方法。代码如下:rs.close();con.close();这样,对查询结果使用完毕后及时关闭了ResultSet对象;在全部数据库操作结束后及时关闭了Connection连接对象。8.3 使用JavaBean模式访问数据库JavaBeans和ActiveX控件一样,可以通过封装业务逻辑建立一整套可重复利用的对象库。JSP对于在Web应用中集成JavaBeans组件提供了完善的支持,这种支持不仅能缩短开发时间(可以直接利用经过测试和可信任的已有组件)、避免重复开发,也为JSP应用带来了更多的可伸缩性。JavaBeans组件可以用来执行复杂的计算任务、或负责与数据库的交互以及数据提取等,这里将以一个实例来介绍如何在JSP中利用JavaBeans通过JDBC-ODBC桥访问客户信息数据库。通过前面章节对JavaBean的学习,我们已经能够熟练地使用“JSP+JavaBean”的开发模式将复杂的、重复性的事务处理代码封装进JvaaBean中供JSP调用。在用JSP访问数据库时,每一次对数据库进行操作时都要进行一系列相同的操作:设置驱动程序,连接数据库,生成一条语句,进行SQL操作,最后断开连接。将这些操作全部放在JSP页面中运行是很繁琐的,因此完全可以把这些对数据库的操作放到JavaBean中去。这样当系统更换后台的数据库时,只需在JavaBean中改变驱动程序以及连接方法即可,从而能够提高代码的可重用性和运行时的效率。下面我们来将8.2.2小节中的实例改写为“JSP+JavaBean”的模式。【代码8.2】odbc_javabean.jsp通过JDBC-ODBC桥访问数据库通过JDBC-ODBC桥访问数据库,其中使用了JavaBean。员工号姓名工作性质所属领导编号入职时间薪资奖金部门编号【代码8.3】JdbcBean.javapackage ;import java.sql.*;public class JdbcBeanConnection con = null;ResultSet rs = null;/实例化、装载JDBC驱动程序public JdbcBean()tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e) /返回查询后的数据集public ResultSet executeQuery(String sql)String url = jdbc:odbc:MyOracle_conn;String username = scott;String password = scott;trycon = DriverManager.getConnection(url, username, password);Statement stmt = con.createStatement();rs = stmt.executeQuery(sql);catch(SQLException e) return rs;/关闭数据库public void closeDB()tryrs.close();con.close();catch(SQLException e)我们在JavaBean程序JdbcBean.java中定义了3个方法函数。其中构造函数JdbcBean()用来装载JDBC-ODBC桥驱动程序;函数executeQuery(String sql)用来执行对数据源MyOracle_conn的查询操作,并将查询所得的数据结果以ResultSet对象的形式返回;函数closeDB()用来关闭数据源和连接,释放资源。JSP程序odbc_javabean.jsp中调用了这个JavaBean,并将对数据源MyOracle_conn的查询结果信息显示出来。运行这个JSP程序,效果如图8.9所示。图8.9 使用JavaBean通过JDBC-ODBC桥访问数据库可以看出,JSP是一种开发Web应用的理想构架,利用跨平台运行的JavaBeans组件,JSP为分离处理逻辑及显示样式提供了卓越的解决方案。8.4 直接使用JDBC访问数据库除了通过JDBC-ODBC桥的方式来访问数据库外,我们也可以直接使用JDBC来访问这些数据库。这样,访问的流程就可以简化为:JSPJDBC驱动程序数据库。当然,这还需要为指定的数据库安装相应的JDBC驱动程序。下面我们以在Windows XP系统下访问Oracle 10g数据库为例,讲解如何在JSP中直接使用JDBC来访问数据库。1. 安装JDBC驱动程序在Oracle安装目录Oraclejdbclib下,找到classes12.jar文件,它就是用于连接Oracle数据库的JDBC驱动程序。将其拷贝到Tomcat安装目录中的“C:Tomcat 5.5commonlib”目录下。也可以在Windows系统的环境变量CLASSPATH中指定此jar文件。重新启动Tomcat后,这个驱动程序即可生效。2. 编写JSP程序JSP程序的具体代码如下。【代码8.4】jdbc.jsp使用JDBC直接访问数据库使用JDBC直接访问数据库员工号姓名工作性质所属领导编号入职时间薪资奖金部门编号运行这个JSP程序,结果如图8.10所示。图8.10 直接使用JDBC访问Oracle数据库3. 程序说明这个JSP程序与前面的代码8.1“Test_jdbc.jsp”仅有两处区别,一处是加载驱动程序的方法Class.forName()中的参数改为了“oracle.jdbc.driver.OracleDriver”,这个字符串代表的是Oracle的驱动程序。另一处是在与Oracle数据库建立连接时,使用了:Connection con = DriverManager.getConnection( jdbc:oracle:thin:localhost:1521:myorc, scott, scott);这里,连接方式也发生了变化,不用通过ODBC数据源去连接,而是使用了一个URL指定要访问的数据库的位置。8.5 使用连接池访问数据库JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用程序开发,存在很多问题。首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费一定的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁地进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重时甚至会造成服务器的崩溃。这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾忌地分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。而在共享资源的创建中,有一个很著名的设计模式,即资源池(Resource Pool)。该模式正是为了解决资源的频繁分配、释放所造成的问题。为解决上述问题,同样也可以采用数据库连接池(Connection Pool)技术。下面就来详细介绍数据库连接池。8.5.1 连接池的工作原理数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无限度地与数据库连接。更为重要的是,我们可以通过连接池的管理机制监视数据库的连接的数量及使用情况,为系统开发、测试和性能调整提供依据。其工作原理如图8.11所示。图8.11 数据库连接池的原理(1)一个数据库连接池应具备以下的功能:l 能够存储n个有效的连接。l 能够为其他方法提供有效连接。l 能够验证连接是否正常。l 能够取回使用过的连接。l 如果当前连接池中没有可用连接,就创建新的连接提供给应用程序。l 连接池关闭时关闭所有连接。(2)有时候在一个应用程序需要访问不同的数据库,这就需要为每一个数据库都建立一个连接池,其实最好的办法是设计一个连接池管理器专门用于连接池的管理,这个管理器应该有以下的功能:l 根据初始设置创建不同的连接池。l 能够存储多个不同的连接池,每个连接池存储一类连接。l 根据不同的请求提供不同连接池中的连接。l 将使用完的连接放回到相应的连接池中去。l 关闭所有连接池中的连接8.5.2 实例:在JSP中使用连接池访问数据库下面我们来看一个例子,在这个例子中,我们要用到两个数据库:MyOracle_conn(Oracle数据库)和testAccess(Access数据库)。将创建数据库的连接池,并用连接池管理器对这两个连接池进行管理。在JSP程序中通过对连接池管理器的调用获取这两个数据库中的信息。由于我们以前没有创建testAccess数据库,所以应首先创建它并进行JDBC配置。1. 创建Access数据库并进行配置(1)在桌面上选择“开始”“所有程序”“Microsoft Office”“Microsoft Office Access 2003”命令,将出现如图8.12所示的对话框。新建一个名为“mydb.mdb”的数据库。图8.12 新建“mydb.mdb”数据库(2)单击【创建】按钮,就会出现名为【mydb : 数据库】的窗口,如图8.13所示。图8.13 数据表的设计界面(3)双击【使用设计器创建表】,按照图8.14来设计一个数据表,表名为“student”。(4)最后为student表添加几条记录,如图8.15所示。将这些数据信息保存,然后关闭Access,完成数据表的创建工作。接下来就要创建ODBC数据源了。图8.14 设计数据表图8.15 为表Users添加数据信息2. 创建ODBC数据源要访问上面创建的mydb数据库中的student表,就要为数据库mydb建立一个数据源。创建方法与8.2.1小节创建Oracle数据库ODBC数据源的操作类似,步骤如下。(1)在控制面板的“管理工具”中,双击“数据源(ODBC)”,选择“系统DSN”。(2)单击“添加”按钮,在弹出的【创建新数据源】对话框中选择“Microsoft Access Driver(*.mdb)”,如图8.16所示。图8.16 选择Microsoft Access Driver(3)单击【完成】按钮,弹出【ODBC Microsoft Access安装】对话框,在【数据源名】一栏中填入数据源名“Access_Database”,再单击【选择】按钮。在弹出的【选择数据库】对话框中找到所需的数据库文件mydb.mdb,如图8.17所示。图8.17 找到所需的数据库文件mydb.mdb(4)单击【确定】按钮,即可将数据源Access_Database映射到数据库文件mydb.mdb,如图8.18所示。最后单击【确定】按钮完成配置。图8.18 将数据源Access_Database映射到数据库文件mydb.mdb3. 用JavaBean实现连接池类DBConnPool下面给出连接池类的主要属性及所要实现的方法。【代码8.5】DBConnPool.javapackage ;import java.sql.*;import java.util.*;/* 连接池类。能够根据要求创建新连接,直到最大连接数为止 */public class DBConnPool private int inUse = 0; / 实际使用中的连接数private Vector connections = new Vector(); / 空闲连接private String poolname; / 连接池名private String dbid; / 数据库标识private String drivername; / 数据库驱动程序名private String username; / 数据库用户名private String passwd; / 数据库密码private int maxconn; / 连接池里允许存在的最大连接数public DBConnPool(String poolname, String drivername, String dbid,String username, String passwd, int maxconn) this.poolname = poolname; / 连接池名this.dbid = dbid; / 数据库标识this.drivername = drivername; / 驱动程序名this.username = username; / 数据库用户名this.passwd = passwd; / 数据库访问密码this.maxconn = maxconn; /最大连接数/* 将连接返回给连接池 */public synchronized void releaseConnection(Connection con) connections.addElement(con); / 将指定连接加入到向量末尾inUse-; / 连接数减1/* 从连接池得到一个连接 */public synchronized Connection getConnection() Connection con = null;if(connections.size() 0) / 从连接列表中获得第一个连接con = (Connection)connections.elementAt(0);connections.removeElementAt(0);/ 如果此连接已关闭,则继续获取try if(con.isClosed()con = getConnection(); catch(Exception ex) ex.printStackTrace();/ 如果实际使用的连接小于最大连接数,就新创建一个连接else if (maxconn = 0 | inUse maxconn) con = newConnection();if(con != null) inUse+; / 连接数加1 return con; / 返回一个连接 /* 创建新的连接 */ private Connection newConnection() Connection con = null; try Class.forName(drivername); / 加载驱动程序 / 建立连接 con = DriverManager.getConnection(dbid, username, passwd); catch(Exception e) e.printStackTrace(); return null; return con; / 返回该连接 /* 关闭所有连接 */ public synchronized void closeConn() Enumeration allConnections = connections.elements(); while(allConnections.hasMoreElements() Connection con = (Connection)allConnections.nextElement(); try con.close(); catch(SQLException e) e.printStackTrace(); connections.removeAllElements(); 在上面这个连接池类中,有一个向量connections用于存储连接对象,它所存储的就是空闲状态的可用连接;应用程序通过getConnection()方法得到连接,如果此时有空闲的可用连接,那么就将连接向量的第一个连接对象返回,并将这个对象从队列中删去。如果此时没有空闲连接,但是连接数又没有达到连接总数的上限,那么就使用newConnection()创建一个新的连接返回给应用程序。如果连接数已经达到上限,那么就返回空指针,要求应用程序等待。在将连接对象交给外部程序之前,连接池还要通过isClosed()方法判断该连接是否已经中断,如果是的话,还应该继续调用getConnection()方法得到一个可用连接。在将一个可用连接提供给应用程序后,要将使用中的连接数inUse加1。需要提醒用户的是,应用程序使用连接后,一定要注意及时调用releaseConnection()方法将连接返回给连接池,连接池类将这个连接对象加入到连接向量的末尾,并将使用中的连接数减1。这样一来,每次得到的连接对象都是在连接向量中闲置时间最长的连接,从而减少了因为闲置时间过长而导致连接被中断的可能。4. 用JavaBean实现连接池管理类DBConnManager下面给出连接池管理类的主要属性及所要实现的方法。【代码8.6】DBConnManager.javapackage ;import java.sql.*;import java.util.*;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训效果资源评价课件
- Imipramine-Standard-生命科学试剂-MCE
- 2025广东汕头大学医学院教务处医学教育拓展项目教辅人员招聘1人模拟试卷及答案详解(全优)
- 2025河南新乡市延津县审计局招聘辅助审计人员5人考前自测高频考点模拟试题及答案详解(典优)
- 2025江苏无锡科技职业学院招聘高层次人才23人(长期)考前自测高频考点模拟试题及一套答案详解
- 2025年毛发化学品:洗发精项目建议书
- 2025年电子、通信产品及软件批发服务合作协议书
- 2025年枣庄市市直公立医院公开招聘备案制工作人员(141人)模拟试卷完整答案详解
- 老师对我的一次鼓舞力量作文4篇范文
- 2025年枣庄山亭区人民医院公开招聘备案制专业技术人员(15人)考前自测高频考点模拟试题及参考答案详解1套
- 医务人员医德考核登记表
- 水资源现状课件
- 卫生政策学之政策方案研制
- 新北师大版四年级数学上册《线与角》练习题(含答案)
- 弓形虫演示教学课件
- 临时用电安全教育培训课件
- GJB9001C-2017质量管理体系检查内容的内部审核检查表【含检查内容】
- 传染病学总论-人卫最新版课件
- 保险行业系列专题一:低利率时代保险业面临的挑战与对策
- 房屋租赁合同书-深圳市(住宅)2019-11(最新版)
- 成本会计—交互分配法(课堂PPT)
评论
0/150
提交评论