快速业务通道

消除JDBC的瓶颈 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

消除JDBC的瓶颈

时间:2010-09-13

摘要

大部分的J2EE(Java 2 Platform, Enterprise Edition)和其它类型的Java应用都需要与数据库进行交互。与数据库进行交互需要反复地调用SQL语句、连接管理、事务生命周期、结果处理和异常处理。这些操作都是很常见的;不过这个重复的使用并不是必定需要的。在这篇文章中,我们将介绍一个灵活的架构,它可以解决与一个兼容JDBC的数据库的重复交互问题。

最近在为公司开发一个小的J2EE应用时,我对执行和处理SQL调用的过程感到很麻烦。我认为在Java开发者中一定有人已经开发了一个架构来消除这个流程。不过,搜索诸如"Java SQL framework" 或者 "JDBC [Java Database Connectivity] framework"等都没有得到满意的结果。

问题的提出?

在讲述一个解决方法之前,我们先将问题描述一下。如果你要通过一个JDBC数据源执行SQL指令时,你通常需要做些什么呢?

1、建立一个SQL字符串

2、得到一个连接

3、得到一个预处理语句(prepared statement)

4、将值组合到预处理语句中

5、执行语句

6、遍历结果集并且形成结果对象

还有,你必须考虑那些不断产生的SQLExceptions;如果这些步骤出现不同的地方,SQLExecptions的开销就会复合在一起,因为你必须使用多个try/catch块。

不过,如果我们仔细地观察一下这些步骤,就可以发现这个过程中有几个部分在执行期间是不变的:你通常都使用同一个方式来得到一个连接和一个预处理语句。组合预处理语句的方式通常也是一样的,而执行和处理查询则是特定的。你可以在六个步骤中提取中其中三个。即使在有点不同的步骤中,我们也可以在其中提取出公共的功能。但是我们应该怎样自动化及简化这个过程呢?

消除JDBC的瓶颈(2)

时间:2010-09-13

查询架构

我们首先定义一些方法的签名,这些方法是我们将要用来执行一个SQL语句的。要注意让它保持简单,只传送需要的变量,我们可以编写一些类似下面签名的方法:

public Object[] executeQuery(String sql, Object[] pStmntValues, ResultProcessor processor);

我们知道在执行期间有所不同的方面是SQL语句、预处理语句的值和结果集是如何分析的。很明显,sql参数指的是SQL语句。pStmntValues对象数据包含有必须插入到预处理语句中的值,而processor参数则是处理结果集并且返回结果对象的一个对象;我将在后面更详细地讨论这个对象。

在这样一个方法签名中,我们就已经将每个JDBC数据库交互中三个不变的部分隔离开来。现在让我们讨论exeuteQuery()及其它支持的方法,它们都是SQLProcessor类的一部分:

public class SQLProcessor { public Object[] executeQuery(String sql, Object[] pStmntValues, ResultProcessor processor) { //Get a connection (assume it''s part of a ConnectionManager class) Connection conn = ConnectionManager.getConnection(); //Hand off our connection to the method that will actually execute //the call Object[] results = handleQuery(sql, pStmntValues, processor, conn); //Close the connection closeConn(conn); //And return its results return results; } protected Object[] handleQuery(String sql, Object[] pStmntValues, ResultProcessor processor, Connection conn) { //Get a prepared statement to use PreparedStatement stmnt = null; try { //Get an actual prepared statement stmnt = conn.prepareStatement(sql); //Attempt to stuff this statement with the given values. If //no values were given, then we can skip this step. if(pStmntValues != null) { PreparedStatementFactory.buildStateme

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号