快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
nt(stmnt, pStmntValues); } //Attempt to execute the statement ResultSet rs = stmnt.executeQuery(); //Get the results from this query Object[] results = processor.process(rs); //Close out the statement only. The connection will be closed by the //caller. closeStmnt(stmnt); //Return the results return results; //Any SQL exceptions that occur should be recast to our runtime query //exception and thrown from here } catch(SQLException e) { String message = "Could not perform the query for " + sql; //Close out all resources on an exception closeConn(conn); closeStmnt(stmnt); //And rethrow as our runtime exception throw new DatabaseQueryException(message); } } } ... }

消除JDBC的瓶颈(3)

时间:2010-09-13

在这些方法中,有两个部分是不清楚的:PreparedStatementFactory.buildStatement() 和 handleQuery()''s processor.process()方法调用。buildStatement()只是将参数对象数组中的每个对象放入到预处理语句中的相应位置。例如:

... //Loop through all objects of the values array, and set the value //of the prepared statement using the value array index for(int i = 0; i < values.length; i++) { //If the object is our representation of a null value, then handle it separately if(value instanceof NullSQLType) { stmnt.setNull(i + 1, ((NullSQLType) value).getFieldType()); } else { stmnt.setObject(i + 1, value); } }

由于stmnt.setObject(int index, Object value)方法不可以接受一个null对象值,因此我们必须使用自己特殊的构造:NullSQLType类。NullSQLType表示一个null语句的占位符,并且包含有该字段的JDBC类型。当一个NullSQLType对象实例化时,它获得它将要代替的字段的SQL类型。如上所示,当预处理语句通过一个NullSQLType组合时,你可以使用NullSQLType的字段类型来告诉预处理语句该字段的JDBC类型。这就是说,你使用NullSQLType来表明正在使用一个null值来组合一个预处理语句,并且通过它存放该字段的JDBC类型。

现在我已经解释了PreparedStatementFactory.buildStatement()的逻辑,我将解释另一个缺少的部分:processor.process()。processor是ResultProcessor类型,这是一个接口,它表示由查询结果集建立域对象的类。ResultProcessor包含有一个简单的方法,它返回结果对象的一个数组:

public interface ResultProcessor { public Object[] process(ResultSet rs) throws SQLException; }

一个典型的结果处理器遍历给出的结果集,并且由结果集合的行中形成域对象/对象结构。现在我将通过一个现实世界中的例子来综合讲述一下。

查询例子

你经常都需要利用一个用户的信息表由数据库中得到一个用户的对象,假设我们使用以下的USERS表:

USERS table Column Name Data Type ID NUMBER USERNAME VARCHAR F_NAME VARCHAR L_NAME VARCHAR EMAIL VARCHAR

并且假设我们拥有一个User对象,它的构造器是:

public User(int id, String userName, String firstName, String lastName, String email)

如果我们没有使用这篇文章讲述的架构,我们将需要一个颇大的方法来处理由数据库中接收用户信息并且形成User对象。那么我们应该怎样利用我们的架构呢?

首先,我们构造SQL语句:

private static final String SQL_GET_USER = "SELECT * FROM USERS WHERE ID = ?";

接着,我们形成ResultProcessor,我们将使用它来接受结果集并且形成一个User对象:

public class UserResultProcessor implements ResultPro

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号