快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
新的行数,不过有时我们可能需要确认一个更新的产生。UpdateProcessor获得更新行的数据,并且可以对行的数目进行任何类型的确认或者记录:

public interface UpdateProcessor { public void process(int rows); }

如果一个更新的调用必须至少更新一行,这样实现UpdateProcessor的对象可以检查更新的行数,并且可以在没有行被更新的时候抛出一个特定的异常。或者,我们可能需要记录下更新的行数,初始化一个结果处理或者触发一个更新的事件。你可以将这些需求的代码放在你定义的UpdateProcessor中。你应该知道:各种可能的处理都是存在的,并没有任何的限制,可以很容易得集成到架构中。

消除JDBC的瓶颈(5)

时间:2010-09-13

更新的例子

我将继续使用上面解释的User模型来讲述如何更新一个用户的信息:

首先,构造SQL语句:

private static final String SQL_UPDATE_USER = "UPDATE USERS SET USERNAME = ?, " + "F_NAME = ?, " + "L_NAME = ?, " + "EMAIL = ? " + "WHERE ID = ?";

接着,构造UpdateProcessor,我们将用它来检验更新的行数,并且在没有行被更新的时候抛出一个异常:

public class MandatoryUpdateProcessor implements UpdateProcessor { public void process(int rows) { if(rows < 1) { String message = "There were no rows updated as a result of this operation."; throw new IllegalStateException(message); } } }

最后就写编写执行更新的方法:

public static void updateUser(User user) { SQLProcessor sqlProcessor = new SQLProcessor(); //Use our get user SQL statement sqlProcessor.executeUpdate(SQL_UPDATE_USER, new Object[] {user.getUserName(), user.getFirstName(), user.getLastName(), user.getEmail(), new Integer(user.getId())}, new MandatoryUpdateProcessor());

如前面的例子一样,我们无需直接处理SQLExceptions和Connections就执行了一个更新的操作。

消除JDBC的瓶颈(6)

时间:2010-09-13

事务

前面已经说过,我对其它的SQL架构实现都不满意,因为它们并不拥有预定义语句、独立的结果集处理或者可处理事务。我们已经通过buildStatement() 的方法解决了预处理语句的问题,还有不同的处理器(processors)已经将结果集的处理分离出来。不过还有一个问题,我们的架构如何处理事务呢?

一个事务和一个独立SQL调用的区别只是在于在它的生命周期内,它都使用同一个连接,还有,自动提交标志也必须设置为off。因为我们必须有一个方法来指定一个事务已经开始,并且在何时结束。在整个事务的周期内,它都使用同一个连接,并且在事务结束的时候进行提交。

要处理事务,我们可以重用SQLProcessor的很多方面。为什么将该类的executeUpdate() 和handleUpdate()独立开来呢,将它们结合为一个方法也很简单的。我这样做是为了将真正的SQL执行和连接管理独立开来。在建立事务系统时,我们必须在几个SQL执行期间对连接进行控制,这样做就方便多了。

为了令事务工作,我们必须保持状态,特别是连接的状态。直到现在,SQLProcessor还是一个无状态的类。它缺乏成员变量。为了重用SQLProcessor,我们创建了一个事务封装类,它接收一个SQLProcessor并且透明地处理事务的生命周期。

具体的代码是:

public class SQLTransaction { private SQLProcessor sqlProcessor; private Connection conn; //Assume constructor that initializes the connection and sets auto commit to false ... public void executeUpdate(String sql, Object[] pStmntValues, UpdateProcessor processor) { //Try and

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