快速业务通道

如何测定JDBC的性能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
理对象,如果在本篇文章中使用代理对象这个术语,会使对封装JDBC对象的解释更复杂,因此,在本篇文章中仍然会坚持使用封装类。

要在上述功能的基础上添加测试数据库交互过程的功能,还需要对应用程序的其他部分作一些改变,很明显的是,这样作需要一定的代价。

幸运的是,当一个框架象JDBC那样几乎完全采用接口来定义时,要用另外的实现替换其中的作一个类就相当简单了。我们可以使用一个封装类替换一个接口的任何一种实现,该封装类封装原有的类,并转发所有对原来类的方法的调用。在本篇文章中,我们可以使用一个封装类替换掉JDBC类,将我们监测JDBC性能的功能放置在封装类中,然后使监测功能随整个应用程序的执行而执行。

如何测定JDBC的性能(2)

时间:2010-12-18

封装Connection类

我们将首先讨论Connection类的封装。下面的ConnectionWrapper类实现了Connection类,该类有一个Connection类的实例变量和使用构建器的参数初始化实例变量的构建器,大多数的Connection类的方法被简单地定义为将调用托付给实例变量:

package tuning.jdbc;    import java.sql.*; import java.util.Map;    public class ConnectionWrapper implements Connection { protected Connection realConnection;    public Connection realConnection () { return realConnection; }    public ConnectionWrapper (Connection Connection) { realConnection = Connection; }    public void clearWarnings() throws SQLException { realConnection.clearWarnings(); }    public void close() throws SQLException { realConnection.close(); }    public boolean isClosed() throws SQLException { return realConnection.isClosed(); }    public void commit() throws SQLException { realConnection.commit(); } ...

我省略了大部分的方法,但它们都符合下面的的模板,在需要使用从数据库驱动程序中获取的Connection对象的地方,我们可以简单地使用ConnectionWrapper封装Connection对象,而使用ConnectionWrapper对象。无论在哪里获取了Connection对象,我们都需要在该处添加下面的二行代码:

Connection dbConnection = getConnectionFromDriver(); dbConnection = new ConnectionWrapper(dbConnection);

获得连接是该应用程序中唯一需要改变的部分,这要求发现所有获得一个Connection对象的调用,并对该调用进行编辑。然而,大多数的应用程序使用一个集中的代理类提供Connection对象,在这种情况下,在应用程序中使用ConnectionWrapper就非常简单了。该代理类需要频繁地访问一个Connection对象池,因此在将一个Connection对象释放回Connection对象池中时,还需要作一些额外的工作,因为Connection对象首先需要被解包,例如:

public static void releaseConnection(Connection conn) { if (conn instanceof ConnectionWrapper) conn = ( (ConnectionWrapper) conn).realConnection(); ... }

我们还没有真正地完成ConnectionWrapper类,ConnectionWrapper类中有一些方法不能简单地托付,这些就是提供各种Statement对象的方法:

public Statement createStatement() throws SQLException { return new StatementWrapper(realConnection.createStatement(), this); }    public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { return new StatementWrapper( realConnection.createStatement(resultSetType, resultSetConcurrency), this); }    public CallableStatement prepareCall(String sql) throws SQLException { return new CallableStatementWrapp

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