- 浏览: 3500516 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
来源:中国论文下载中心
摘 要 在Web应用 程序设计中,提升数据库的响应性能是改善应用性能的关键。基于JDBC的Web数据库应用中,使用JDBC的优化技术,改善数据模型,可提高Web应用程序的响应性能。
关键词
JDBC;Web数据库;连接池;事务
1 引言
随着Internet的广泛应用,由于B/S结构所拥有的投资维护成本低、客户端部署简单等特点。目前
,Web
应用程序正在以非常快的速度在增长,Web应用程序不再是简单显示信息的网站,而逐渐融合核心的业务逻辑,成为IT领域的业务处理平台。Java以其面向
对象、跨平台、安全性、健壮性等优秀特性已成为开发Web应用的主要选择。JDBC为基于Java平台的Web应用程序完成数据库操作提供了完备的方法
接口。基于JDBC的Web数据库应用程序的结构如图1所示。因Web数据库接受来自众多并发的客户端所发出的SQL操作,特别是在企业
级应用中, Web应用程序需要尽可能快的执行SQL操作并返回结果,所以需要进一步优化数据库的访问性能。
图1 基于JDBC的Web数据库应用程序的结构
2 JDBC的结构和应用模式
JDBC是一种可用于执行SQL语句的Java
API,由一些Java语言编写的类和接口组成。JDBC为数据库应用开发人员、数据库前台开发人员提供了一种标准的应用程序设计接口,使开发人员可以用
纯Java语言编写完整的数据库应用。通过使用JDBC,开发人员可以很方便的将SQL语句传送给几乎任何一种数据库,有很好的可移植性。JDBC的结构
和工作过程如图2。用JDBC进行数据库访问的操作步骤:①引入java.sql与javax.sql软件包;②装载JDBC驱动库;③用
Connection接口建立一个到数据库的连接对象;④通过SQL语句建立一个Statement对象;⑤通过Statement执行数据库操作;⑥获
取数据库数据或更新数据库数据;⑦关闭结果集对象ResultSet、Statement对象与Connection对象。
图2 JDBC的结构和工作过程
JDBC驱动器可以分为下面四种:①桥式驱动器,这种驱动器程序使用桥技术将Java应用程序与一
个ODBC数据库连接。这种驱动器先将JDBC转化为ODBC驱动,应用程序依赖后者与数据库通信。桥式驱动器用本地代码实现,且必须安装ODBC管理器
和配置ODBC驱动。一般不建议使用。②Native-API半Java驱动器,它通过native
C语言库将JDBC调用转换成对数据库的客户API的调用,从而实现与数据库的通信。这种驱动一部分用Java语言编写,另一部分用native代码实
现,因而性能相对比纯Java实现的驱动器要高,但在使用时,必须安装一些与平台有关的代码。③Net-Protocal全Java驱动器,它通过网络
协
议与中间层连接,而中间层可使用任何一种驱动来存取数据库。适应性好,使用方便灵活。④Native-Protocol全Java驱动器,这类驱动器将
JDBC请求转化为与数据库相关的网络协议,不用借助任何其他帮助而直接对数据库进行存取。Net-Protocal全Java驱动器与Native-
Protocol全Java驱动器运算速度较快,性能比较好。Net-Protocal全Java驱动器可以借助于应用服务器所提供连接池技术、缓冲技
术、负载均衡技术等,获得较高的性能,适合于Web应用的开发。
3 优化Statement、ResultSet对象
与Connection对象一样,Statement对象是JDBC程序设计中非常重要的对象。它
包含了SQL语句的查询和更新操作。它是操作数据库数据的载体,在对数据库的操作中,起着重要的作用。ResultSet对象是执行SQL语句后产生的结
果集,通常是数据库的查询结果。其信息的形式可以认为是一张由行和列组成的二维数据表。通过对该结果集的操作,就可以获取各项数据。
3.1 选择正确的Statement对象并及时关闭
在JDBC技术规范中,共有3种不同类型的Statement对象。它们分别
是:Statement、PreparedStatement和CallableStatement。
Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句,由于
PreparedStatement对象已经预编译过,所以起执行速度要快于Statement对象。因此,多次执行的SQL语句经常创建为
PreparedStatement对象,可以提高数据库的总体效率;CallableStatement对象用于执行数据库已经存储的调用,存储过程是
由SQL语句和流控制语句书写的过程程序,这个程序经数据库编译和优化后存储在数据库服务器中,充分利用存储过程来完成应用系统的逻辑操作处理可以提高系
统的运行性能和可维护性。
3.2 采用合适的方法操作ResultSet对象
结果集读取数据的方法主要是getXXX(),其参数可以使用整型表示第几列,也可以是列名。返回
的是对应的XXX的类型的值。使用getString()可以返回所有列的值,不过返回的都是字符串类型的。还可以通过使用
getAsciiStream()获得该列对应的当前行的ascii流。但如果使用的方法与实际的数据域的类型不匹配,那么系统要将相应的字段数据进行类
型转换,尤其是在查询返回巨大数据的时候,将会扩大系统开销,降低应用性能,对应用性能产生很大的影响
。因此应尽量使用与数据域类型相匹配的方法获取所应用的数据域中的数据。
4 合理使用JDBC的数据库事务操作
合理使用事务功能促进数据访问的并发性。为了保证Web环境下多用户协调地访问数据,应注意根据情
况使用锁定管理。JDBC的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。通过提交commit(
)或者回滚rollback(
)来结束事务的操作。在JDBC中,事务操作默认是自动提交的。也就是说,一条对数据库的更新表达式代表一项事务操作,操作完成后,系统将自动调用
commit( )来提交,否则将调用rollback(
)来回滚。可以通过调用setAutoCommit(false)来禁止自动提交,之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用
commit( )进行整体提交,如果其中一个表达式操作失败,则不会执行到commit( ),并且将产生响应异常,此时就可以在捕获异常时调用rollback( )进行回滚。下面的例子演示用于连接MySQL数据库中使用数据库事务的基本过程。
Connection cnt=null;
String url=”jdbc:mysql://localhost:3306/sdb”; //sdb为测试用的数据库名
String user=”abc”;
String pw=”123456”; //abc,pw分别为测试用的数据库用户名和密码
try{
Class.froName(“com.mysql.jdbc.Driver”).newInstance();
//加载MySQL数据库驱动
conn=DriverManager.getConnection(url,user,pw);
//获取数据库的连接
conn.setAutoCommit(false);
stmt=conn.createStatement();
stmt.executeUpdate(“SQL语句1”);// 数据库更新操作1
stmt.executeUpdate(“SQL语句2”);// 数据库更新操作2
conn.commit();//事务提交
}catch(Exception ex){
ex.printStackTrace();
try{
conn.rollback();//操作不成功则回滚
}catch(Exception e){e. printStackTrace();}
}
选择合适的事务隔离层,JDBC
API支持事务对数据库的加锁,并且提供了5种操作支持、2种加锁密度。其中5种支持如下:static int
TRANSACTION_NONE=0;表示禁止事务操作和加锁。static int TRANSACTION_READ_ UNCOMMITTED
=1;表示允许脏数据读写、重复读写和影响
读写。static int
TRANSACTION_READ_COMMITTED=2; 表示禁止脏数据读写,允许重复读写和影响读写。static int
TRANSACTION_REPEATABLE_READ =4; 表示禁止脏数据读写和重复读写,允许影响读写。static int
TRANSACTION_ SERIALIZABLE =8; 表示禁止脏数据读写和重复读写,允许影响读写。
5 采用数据池提高效率
在使用JDBC对数据库操作时,创建数据库连接对绝大多数驱动器而言都是一项昂贵的操作,要消耗一些资源,因此数据库的连接是一个影响性能的瓶颈。在Web数据库应用
程序中,每一个HTTP请求都需要创建一个新的数据库连接,这样会降低程序的使用性能,甚至是Web服务器过载。因此,“开通连接,与数据库通信,关闭连接”的JDBC编程模式在Web应用程序中并不可取。采用连接池是一种解决以上问题
很
好的机制,它将若干个开通的数据库连接保持在一个缓存中,以共程序随时取用。程序需要时可以从连接池中取出一个连接,服务完毕后再将连接还给连接池。
JDBC 2.0
扩展允许请求客户机透明地共享连接池中的多个连接对象,应用服务器供应商在其内存空间上实现连接池管理器,并根据需要动态地改变池的大小,从而优化资源的
使用。以下为在Tomcat平台上数据源的调用方法
:
InitialContext tx=new InitialContext();//初始上下文对象
DataSource datas=( DataSource)tx.lookup(“java:comp/env/jdbc/ sdb”)//获得数据源对象
Conn=datas.getConnection();//从数据源连接池中取得一个数据库连接
连接池的实现未必都有JDBC驱动器开发商提供,可以从第三方得到,甚至程序开发人员可以自己开发。
6 Web数据库关系数据模型优化
为了提高Web数据库应用系统的性能在优化JDBC的基础上,可以对数据库库的关系模型进性优化。
①对关系模式进行逆规范化,当查询操作涉及多个关系时,对那些使用频率高、要求响应速度快的查询操作设计的关系适当合并,以减少对关联的操作,提高数据库
的响应速率。②对关系模式进行垂直分割,当关系中一部分属性使用频率高,而另一部分属性使用率低,可将关系分解为两个关系,降低单位时间内所有应用需要存
取的数据量.③对关系模式进行水平分割,即根据关系中某属性把关系分解成多个关系,这样能够在查询的时候迅速定位,提高查询速度。比如校学生管理信息管理
系统中,定义学生的属性,学生:(学号,姓名,性别,班级,学院)。因不同的用户在访问时关心的是不同学院的学生,所以就可以学院属性把关系分割为多个关
系。
7 总结
发表评论
-
oracle复制表数据,复制表结构
2011-07-25 21:19 361951.不同用户之间的表数据复制 对于在一个数据库上的两个 ... -
删除 SQL Server 的所有已知实例
2011-04-05 18:42 2029如果提示实例已经被注册,无法安装,那么: 删除 SQL ... -
【SQL】安装 SQL SERVER MsiGetProductInfo 无法检索 Product Code 1605错误 解决方案
2011-04-05 17:10 4845重装数据库服务器上的SQL SERVER 2008 上遇到了以 ... -
Mysql Using Master/Slave Replication with ReplicationConnection
2011-03-24 15:19 1983Starting with Connector/J 3.1.7 ... -
oracle网络配置listener.ora、sqlnet.ora、tnsnames.ora
2010-12-03 12:36 33334oracle网络配置 三个配置文件 listener.ora ... -
Oracle XE的数据库创建过程
2010-12-02 22:55 4341今天安装了Oracle XE,发现并没有自动创建数据库。趁着 ... -
实现数据库TPC性能测试的开源及商业软件
2010-12-02 01:11 3118商业软件 Benchmark Factory ... -
MySQL压力测试工具mysqlslap
2010-11-07 17:13 1768MySQL从5.1.4版开始带有一个压力测试工具mys ... -
一台机器上安装多个mysqld实例
2010-11-06 16:09 2165一台机器安装多个mysqld实例 1. ps -aux | ... -
MySQL数据库双向同步
2010-08-25 20:23 40741. 主从关系的同步 master端 192.168.5 ... -
MySQL 数据库之间的同步(windows与linux)
2010-08-25 20:14 32051.导出windows mysql的test库到linux m ... -
Ubuntu Server 下开启远程连接 MySQL
2010-03-16 23:24 3105要通过远程连接MySQL,需要做两步:第一步是要创建一个可以远 ... -
DB2 在REDHAT 5下的详细安装过程 DB2 9.5 C EXPRESS
2010-03-02 10:43 4584过详细测试并且补充后发表, 括号内的为自行添加的内容. ... -
IBM DB2 Express-C 9.5.2
2010-03-02 09:44 3509或许您已经知 ... -
Oracle Database 10g Express Edition安装小结
2010-03-01 15:28 9165racle Database 10g Express Edit ... -
HA JDBC – High Availability JDBC
2010-02-27 18:46 3302Some time ago I worked on a pr ... -
数据归档将走向何方
2010-02-25 11:50 2263数据量的爆炸性增长,让我们不得不更加关心存储。这也造成 ... -
Database
2010-02-18 15:53 2313下一代数据库发展的4大趋势 趋势之一:对XML的支 ... -
免安装Oracle运行pl/sql developer
2010-02-16 20:27 2181Sql客户端中,虽然最便捷的是万能而且轻量无比的Sql Wor ... -
在debian上安装oracle 10g express
2010-02-16 18:46 4919在debian上安装oracle 10g express 若 ...
相关推荐
总的来说,基于JDBC的数据库连接池技术是优化Web应用程序数据库访问性能的关键。它提高了资源利用率,降低了系统开销,提升了系统的稳定性和响应速度,是现代企业级应用不可或缺的一部分。通过深入研究和合理应用...
### 基于JDBC的数据库连接池技术研究 #### 一、引言 随着互联网技术的迅猛发展,特别是Web应用的广泛普及,传统的客户端/...通过合理配置和管理连接池,开发者可以轻松地构建高性能、高可靠性的数据库应用程序。
综上所述,JDBC在构建基于Web的应用程序中扮演了核心角色,从数据库连接、数据操作到事务管理和安全性控制,都离不开JDBC的支持。开发者需要熟练掌握JDBC的使用技巧,以便在实际项目中构建高效、稳定且安全的Web应用...
【JSP中数据库访问的性能优化研究】 在Web应用程序开发中,基于B/S架构的三层或多层模式广泛应用于构建各种互联网服务。在这种架构下,JSP(Java Server Pages)作为前端展示层,经常需要与数据库进行交互以获取和...
Web数据库设计是构建基于Web的应用程序的关键组成部分,它允许用户通过Web界面与数据库进行交互。在Web数据库设计中,有几种主要的技术用于实现这一目标,包括CGI(Common Gateway Interface)、ODBC(Open Database...
【基于XML的WEB数据库信息发布系统的研究与设计】 XML(Extensible Markup Language)是一种可扩展标记语言,被广泛用于数据交换和存储,特别是在Web应用程序中。本研究与设计的主题是构建一个基于XML的WEB数据库...
综上所述,Oracle Database 10g 在 Java、JDBC 和 Web 服务方面都带来了显著的增强,这些增强不仅极大地提高了开发者的生产力,也降低了应用程序的风险,并扩展了 Oracle 数据库的能力。无论是对于 Java 开发者还是 ...
通过这个实验报告,我们可以看到JavaEE开发数据库应用程序的完整流程,从基础的JDBC操作到高级的框架应用,以及如何在MVC模式下组织代码,这对于理解和实践JavaEE开发有着重要的意义。同时,这也强调了数据库设计、...
总的来说,基于JDBC的数据库连接池技术是提升Web应用程序性能、降低资源消耗的关键技术,它通过有效的连接管理和复用,优化了数据库操作的效率,适应了高并发场景的需求,是现代企业级应用开发不可或缺的部分。...
在这个系统中,JDBC(Java Database Connectivity)数据库连接池技术用于优化数据库操作,提高系统性能。 首先,我们来深入理解三层架构。三层架构是一种常见的软件设计模式,主要分为表现层(Presentation Layer)...
如果没有适当的处理机制,服务器端可能会面临应用程序与数据库之间连接数急剧增加的情况,从而导致应用程序性能下降,甚至可能导致数据库服务器或Web服务器崩溃。 传统的数据库连接池管理程序能够实现基于数据库...
开发基于JDBC的Java应用程序时,有几个核心概念需要了解: - Connection对象:代表与数据库的会话。 - Statement/PreparedStatement对象:用于执行SQL查询。 - ResultSet对象:存储查询结果。 - Transaction管理:...
在动态Web数据库应用中,JSP通常负责处理用户的请求,执行数据库操作,并将结果转换为XML格式。XML数据可以被JSP页面解析,然后以适当的形式展示给用户。这种结合使用JSP和XML的方式,既保证了数据的结构化,又提供...
本项目是天津理工大学针对Web应用程序设计与开发的一次大作业,它要求学生综合运用Java Server Pages (JSP)、EasyUI、Servlet以及Java Database Connectivity (JDBC) 技术来构建一个功能完备的Web应用。具体任务是...
Web数据库使得Web应用程序能够动态地获取、处理、存储和展示数据,为用户提供交互式的体验。以下是对Web数据库的详细介绍: 1. **Web数据库的概念**: Web数据库是一种与Web应用程序集成的数据库系统,它允许用户...