论文部分内容阅读
摘要:在简要介绍了JSP数据库连接技术的基本原理和实现方法的基础上,提出了在数据存储、正确选择驱动程序、使用连接池技术及代码优化等方面改进数据访问效率的措施。
关键词:JSP;数据库;连接池
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)24-1283-02
Research on Performance Optimization of Database Accessing Technologies in JSP
SHENG Zhong-biao
(Department of Computer Science, Weinan Teachers College, Weinan 714000, China)
Abstract: The article first introduces the basic principle and the way how to use the database connection technology of JSP. And then put forward the method of database access based on data storage, the correct choice of JDBC, the technology of connection pool and the optimization about code.
Key words: JSP; database; connection pool.
1 前言
目前,基于B/S模式的三层或多层开发模式,已成为开发Web应用普遍采用的方法。在B/S架构的系统中,应用系统要频繁访问数据库,连接数据库需要用户验证,使用以后又要确保它们被正确关闭。因此连接数据库是一种耗时的操作,对数据库的高效访问成为Web应用的关键所在[1]。
2 JSP中数据库访问技术
2.1 JDBC数据库访问机制
JSP中对数据库的访问是通过JDBC实现的。JDBC是由SUN 公司制定的Java数据库连接技术的简称。用来支持独立于任何特定SQL实现的基本SQL功能,提供数据库访问的基本功能。JDBC的一个主要特点就是数据库的互操作性。即就是通过使用JDBC API来进行数据库访问,可以在不修改应用程序的情况下,改变所使用的数据库驱动程序(或数据库引擎)。
2.2 JDBC的功能结构
图1为JDBC功能结构图。JDBC的结构分为两层:面向开发人员的JDBC API和面向底层的JDBC Driver API。
2.3 JDBC驱动程序的类型[2]
1)JDBC-ODBC桥和ODBC驱动程序。
2)JDBC网络驱动,为适应应用服务器与数据库服务器分离的结构而提供的方式。
3)数据库协议驱动程序,该方式将JDBC与一种通用数据库协议驱动程序相连,利用中间件和协议解释器将该协议驱动程序与某种具体的数据库系统相连。
4)本地数据库专用驱动程序。
3 性能优化方法
3.1 数据存储方面
在数据的存取方面,采用JSP/Servlet JDBC的技术。Web服务器主要负责接收本地或远程浏览器的HTTP数据请求,中间层的Servlet收到请求,利用JDBC提供的标准API对数据库进行访问和相应的操作处理。Servlet再将查询的数据传给JSP,最后生成标准的JSP页面将结果返回给提出请求的浏览器。这样,不仅将客户端与数据库服务器端分开,同时提高了数据库的访问效率。
3.2 正确选择JDBC驱动程序
3.2.1 JDBC驱动程序分析
驱动程序1:这种方式借用了现成的ODBC驱动程序,方便了开发人员。但是这种方式增加了一个中间层次,使得访问数据库的效率和可靠性有所下降,而且有些驱动程序不是多线程的,不适合在要求并行访问数据库和数据库驱动程序的情况下使用。
驱动程序2:这种类型的驱动程序把对JDBC的调用转化成对DBMS直接使用的网络协议,从而允许Java客户端直接访问DBMS。这类驱动程序性能最好,但是只能访问一种数据库。
驱动程序3:这种类型的驱动程序使用不依赖于具体DBMS的网络协议而是与中间服务器通信。
驱动程序4:这种类型的驱动程序不是纯JAVA驱动程序,此类驱动程序也必须在本地计算机上先安装好特定的驱动程序,然后通过JDBC-NativeAPI Bridge 的转换,把Java程序中使用的JDBC API 转换成Native API,进而存取数据库。这种方法效率比第一类驱动程序效率虽然高一些,但仍然需要在每台客户机上预先安装本地API库,因此不利于维护和使用。
3.2.2 JDBC驱动程序选择
综上所述最佳的JDBC驱动程序类型是第二类,它不会增加任何额外的开销,并且由纯Java语言开发而成,拥有最佳的兼容性。第三类JDBC驱动程序也是不错的选择,它也是由纯Java 语言开发而成的,并且中间件也仅需要在服务器上安装。因此,建议最好以第二类和第三类JDBC驱动程序为主要选择。
3.3 使用连接池技术
3.3.1 建立连结池的必要性
Web应用程序的访问,要面对并发问题。随着用户数量的增加,当前面的用户请求尚未处理完毕时,后面的请求已经到来的可能性就会大大增加。让应用程序在某一时刻只接受一条数据库请求是不现实的。
通常采用的方法有两个:1)为每一个请求建立新的数据库链接;2)在JSP初始化时,创建一个单独的数据库连接。但是这两种方法都可能导致系统内存不足,资源耗尽。
连接池技术是目前被认为最合适的解决数据库连接问题的方法,它在设计上是一种互相冲突的需求的折衷。这里复杂性和资源,性能和效率得到了很好的均衡。
3.3.2 连接池实现
连接池技术最基本的思想就是预先建立一些连接放置于内存对象中以备使用。当程序中需要建立连接时,只需从内存中取一个来用而不用新建[4]。同样,使用完毕后,只需放回内存即可。
在实际应用中,通过连接池管理程序设置连接的最大数目,控制着同一时刻有多少并发请求可以被同时处理。所有当前的请求都被连接池管理程序按顺序锁定。这些请求线程的锁定时通过高层应用程序代码进行的。一旦某个JSP将连接交还给了连接池,那么管理程序就会立刻将其分配给锁定队列中的下一个请求。这样就需要建立一个好的连接池管理程序,在编写死锁-释放、并发访问等管理代码时必须考虑所有可能的并发问题。
下面给出实现connectionPool的JavaBean如下:
//查询完整的SQL语句
public ResultSet query(String strquery){
try{
con = poolConn.getConnection();
stat = con.createStatement();
ResultSet result = stat.executeQuery(strquery);
return result;
}catch(SQLException e){
e.printStackTrace();
return null;
}finally{
poolConn.returnConnection(con);
}
}
//提交数据库的更改请求
public int update(String strquery){
try{
con = poolConn.getConnection();
stat = con.createStatement();
stat.executeUpdate(strquery);
return 1;
}catch(SQLException e){
return 0;
}
finally{
poolConn.returnConnection(con);
} }
通过这样的封装,内部模块的耦合性得到了降低,用户只需要根据sql语句的性质,分别调用query(sql)和update(sql)两个函数即可完成数据库的操作,而无需考虑如何建立和释放连接,以及是否使用连接池等等细节。
3.4 程序中SQL语句格式的优化
JSP中访问数据库时,如果多次在普通Statement 对象执行SQL语句,命令每次都要被数据库进行解析和编译。而使用PreparedStatement对象时,由于PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经编译。因而当其执行时,只需DBMS运行SQL语句,而不必先编译。因而,可大大降低运行时间,当然也加快了数据库访问的速度。
3.5 JavaBeans封装对数据库的操作
JavaBean是一种可以重用的Java组件,它的最大优点是可以实现代码的重复利用,并且当更换后台数据库时,不必修改JSP 页面,只需要在JavaBean 中改变驱动程序以及连接方法,有利于程序的维护。JavaBean的工作原理是将数据库基本的处理逻辑封装在JavaBean包中,通过JSP调用JavaBean实现数据库的连接。
4 结论
数据库访问的性能优化对提高系统可用性和效率有着非常重要的意义。在实际开发中针对不同的客户需求和应用环境选取合适JDBC驱动程序;在编码过程中使用连接池技术;优化SQL 查询语句;以及数据库结构的优化都会提升应用程序的效率。当然实际操作中的经验积累也是提高JSP数据库访问性能的重要方面,只有针对具体的开发要求和开发环境,进而采取相应的措施,才能得到较为满意的数据访问效率。
参考文献:
[1] Kevin M,Todd L,Jhon C.Java数据库应用程序编程指南[M].北京:电子工业出版社,2002。
[2] 吴兴兴,高保禄,董志锋,等.网络数据库应用实例[M].北京:人民邮电出版社,2000:155-157.
[3] 宋善德,郭飞.基于Java的Web数据库连接池技术的研究[J].计算机工程与应用,2002,(8):201-206.
[4] 杨绍方.深入掌握J2EE编程技术[M].北京:科学出版社,2002.
[5] Annunziato J.JSP速成教程[M].北京:机械工业出版社,2002.
[6] 耿祥义,张跃平.JSP基础教程[M].北京:清华大学出版社,2004.
关键词:JSP;数据库;连接池
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)24-1283-02
Research on Performance Optimization of Database Accessing Technologies in JSP
SHENG Zhong-biao
(Department of Computer Science, Weinan Teachers College, Weinan 714000, China)
Abstract: The article first introduces the basic principle and the way how to use the database connection technology of JSP. And then put forward the method of database access based on data storage, the correct choice of JDBC, the technology of connection pool and the optimization about code.
Key words: JSP; database; connection pool.
1 前言
目前,基于B/S模式的三层或多层开发模式,已成为开发Web应用普遍采用的方法。在B/S架构的系统中,应用系统要频繁访问数据库,连接数据库需要用户验证,使用以后又要确保它们被正确关闭。因此连接数据库是一种耗时的操作,对数据库的高效访问成为Web应用的关键所在[1]。
2 JSP中数据库访问技术
2.1 JDBC数据库访问机制
JSP中对数据库的访问是通过JDBC实现的。JDBC是由SUN 公司制定的Java数据库连接技术的简称。用来支持独立于任何特定SQL实现的基本SQL功能,提供数据库访问的基本功能。JDBC的一个主要特点就是数据库的互操作性。即就是通过使用JDBC API来进行数据库访问,可以在不修改应用程序的情况下,改变所使用的数据库驱动程序(或数据库引擎)。
2.2 JDBC的功能结构
图1为JDBC功能结构图。JDBC的结构分为两层:面向开发人员的JDBC API和面向底层的JDBC Driver API。
2.3 JDBC驱动程序的类型[2]
1)JDBC-ODBC桥和ODBC驱动程序。
2)JDBC网络驱动,为适应应用服务器与数据库服务器分离的结构而提供的方式。
3)数据库协议驱动程序,该方式将JDBC与一种通用数据库协议驱动程序相连,利用中间件和协议解释器将该协议驱动程序与某种具体的数据库系统相连。
4)本地数据库专用驱动程序。
3 性能优化方法
3.1 数据存储方面
在数据的存取方面,采用JSP/Servlet JDBC的技术。Web服务器主要负责接收本地或远程浏览器的HTTP数据请求,中间层的Servlet收到请求,利用JDBC提供的标准API对数据库进行访问和相应的操作处理。Servlet再将查询的数据传给JSP,最后生成标准的JSP页面将结果返回给提出请求的浏览器。这样,不仅将客户端与数据库服务器端分开,同时提高了数据库的访问效率。
3.2 正确选择JDBC驱动程序
3.2.1 JDBC驱动程序分析
驱动程序1:这种方式借用了现成的ODBC驱动程序,方便了开发人员。但是这种方式增加了一个中间层次,使得访问数据库的效率和可靠性有所下降,而且有些驱动程序不是多线程的,不适合在要求并行访问数据库和数据库驱动程序的情况下使用。
驱动程序2:这种类型的驱动程序把对JDBC的调用转化成对DBMS直接使用的网络协议,从而允许Java客户端直接访问DBMS。这类驱动程序性能最好,但是只能访问一种数据库。
驱动程序3:这种类型的驱动程序使用不依赖于具体DBMS的网络协议而是与中间服务器通信。
驱动程序4:这种类型的驱动程序不是纯JAVA驱动程序,此类驱动程序也必须在本地计算机上先安装好特定的驱动程序,然后通过JDBC-NativeAPI Bridge 的转换,把Java程序中使用的JDBC API 转换成Native API,进而存取数据库。这种方法效率比第一类驱动程序效率虽然高一些,但仍然需要在每台客户机上预先安装本地API库,因此不利于维护和使用。
3.2.2 JDBC驱动程序选择
综上所述最佳的JDBC驱动程序类型是第二类,它不会增加任何额外的开销,并且由纯Java语言开发而成,拥有最佳的兼容性。第三类JDBC驱动程序也是不错的选择,它也是由纯Java 语言开发而成的,并且中间件也仅需要在服务器上安装。因此,建议最好以第二类和第三类JDBC驱动程序为主要选择。
3.3 使用连接池技术
3.3.1 建立连结池的必要性
Web应用程序的访问,要面对并发问题。随着用户数量的增加,当前面的用户请求尚未处理完毕时,后面的请求已经到来的可能性就会大大增加。让应用程序在某一时刻只接受一条数据库请求是不现实的。
通常采用的方法有两个:1)为每一个请求建立新的数据库链接;2)在JSP初始化时,创建一个单独的数据库连接。但是这两种方法都可能导致系统内存不足,资源耗尽。
连接池技术是目前被认为最合适的解决数据库连接问题的方法,它在设计上是一种互相冲突的需求的折衷。这里复杂性和资源,性能和效率得到了很好的均衡。
3.3.2 连接池实现
连接池技术最基本的思想就是预先建立一些连接放置于内存对象中以备使用。当程序中需要建立连接时,只需从内存中取一个来用而不用新建[4]。同样,使用完毕后,只需放回内存即可。
在实际应用中,通过连接池管理程序设置连接的最大数目,控制着同一时刻有多少并发请求可以被同时处理。所有当前的请求都被连接池管理程序按顺序锁定。这些请求线程的锁定时通过高层应用程序代码进行的。一旦某个JSP将连接交还给了连接池,那么管理程序就会立刻将其分配给锁定队列中的下一个请求。这样就需要建立一个好的连接池管理程序,在编写死锁-释放、并发访问等管理代码时必须考虑所有可能的并发问题。
下面给出实现connectionPool的JavaBean如下:
//查询完整的SQL语句
public ResultSet query(String strquery){
try{
con = poolConn.getConnection();
stat = con.createStatement();
ResultSet result = stat.executeQuery(strquery);
return result;
}catch(SQLException e){
e.printStackTrace();
return null;
}finally{
poolConn.returnConnection(con);
}
}
//提交数据库的更改请求
public int update(String strquery){
try{
con = poolConn.getConnection();
stat = con.createStatement();
stat.executeUpdate(strquery);
return 1;
}catch(SQLException e){
return 0;
}
finally{
poolConn.returnConnection(con);
} }
通过这样的封装,内部模块的耦合性得到了降低,用户只需要根据sql语句的性质,分别调用query(sql)和update(sql)两个函数即可完成数据库的操作,而无需考虑如何建立和释放连接,以及是否使用连接池等等细节。
3.4 程序中SQL语句格式的优化
JSP中访问数据库时,如果多次在普通Statement 对象执行SQL语句,命令每次都要被数据库进行解析和编译。而使用PreparedStatement对象时,由于PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经编译。因而当其执行时,只需DBMS运行SQL语句,而不必先编译。因而,可大大降低运行时间,当然也加快了数据库访问的速度。
3.5 JavaBeans封装对数据库的操作
JavaBean是一种可以重用的Java组件,它的最大优点是可以实现代码的重复利用,并且当更换后台数据库时,不必修改JSP 页面,只需要在JavaBean 中改变驱动程序以及连接方法,有利于程序的维护。JavaBean的工作原理是将数据库基本的处理逻辑封装在JavaBean包中,通过JSP调用JavaBean实现数据库的连接。
4 结论
数据库访问的性能优化对提高系统可用性和效率有着非常重要的意义。在实际开发中针对不同的客户需求和应用环境选取合适JDBC驱动程序;在编码过程中使用连接池技术;优化SQL 查询语句;以及数据库结构的优化都会提升应用程序的效率。当然实际操作中的经验积累也是提高JSP数据库访问性能的重要方面,只有针对具体的开发要求和开发环境,进而采取相应的措施,才能得到较为满意的数据访问效率。
参考文献:
[1] Kevin M,Todd L,Jhon C.Java数据库应用程序编程指南[M].北京:电子工业出版社,2002。
[2] 吴兴兴,高保禄,董志锋,等.网络数据库应用实例[M].北京:人民邮电出版社,2000:155-157.
[3] 宋善德,郭飞.基于Java的Web数据库连接池技术的研究[J].计算机工程与应用,2002,(8):201-206.
[4] 杨绍方.深入掌握J2EE编程技术[M].北京:科学出版社,2002.
[5] Annunziato J.JSP速成教程[M].北京:机械工业出版社,2002.
[6] 耿祥义,张跃平.JSP基础教程[M].北京:清华大学出版社,2004.