快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ws SQLException { return connectionParent; }

如何测定JDBC的性能(4)

时间:2010-12-18

第二,我们有返回ResultSets的方法。这些方法需要返回ResultSet的封装类。为了保证ResultSetWrapper的一致性,我们在StatementWrapper中添加了一个传递给其构建器的lastSqlString实例变量。当我们对特定的SQL语句进行性能监测时,该实例变量就非常有用了。返回ResultsSets的方法如下所示:

//StatementWrapper方法 public ResultSet getResultSet() throws SQLException { return new ResultSetWrapper(realStatement.getResultSet(), this, lastSql); }    public ResultSet executeQuery(String sql) throws SQLException { return new ResultSetWrapper(realStatement.executeQuery(sql), this, sql); }    //PreparedStatementWrapper方法 public ResultSet executeQuery() throws SQLException { return new ResultSetWrapper(realPreparedStatement.executeQuery(), this, sql); }

第三,一些方法使用了java.sql.Array对象。由于这些Array对象能够返回ResultSet,因此我们再次需要提供一个Array封装对象,以便返回ResultSetWrapper而不是普通的ResultSets。另外,我们还需要处理Array对象被传递给setArray()方法的情况:如果传递的是Array封装对象,则在被传递给PreparedStatement前,该对象需要被解封装:

public void setArray(int i, Array x) throws SQLException { if (x instanceof SQLArrayWrapper) realPreparedStatement.setArray(i, ((SQLArrayWrapper) x).realArray); else realPreparedStatement.setArray(i, x); }    public Array getArray(int i) throws SQLException { return new SQLArrayWrapper(realCallableStatement.getArray(i), this, sql); }

最后,我们创建这些封装类的目的是能够实现性能的监测。我们要在下面的方法中添加测试JDBCLogger类性能的功能,这样每个方法都有一个对被封装在测试调用中的真正执行方法的调用。我们将sql字符串和当前的线程传递给测试调用,因为对于任何类型的测试调用来说,这二个参数都是十分重要的,尤其是在测量过程运行的时间时更是如此。另外,需要注意的是,我还重新定义了返回ResultSets的executeQuery()方法,以便在其中插入测试类:

//StatementWrapper方法 public void addBatch(String sql) throws SQLException { realStatement.addBatch(sql); lastSql = sql; }    public boolean execute(String sql) throws SQLException { Thread t = Thread.currentThread(); JDBCLogger.startLogSqlQuery(t, sql); boolean b = realStatement.execute(sql); JDBCLogger.endLogSqlQuery(t, sql); lastSql = sql; return b; }    public int[] executeBatch() throws SQLException { Thread t = Thread.currentThread(); JDBCLogger.startLogSqlQuery(t, "batch"); int[] i = realStatement.executeBatch(); JDBCLogger.endLogSqlQuery(t, "batch"); return i; }    public ResultSet executeQuery(String sql) throws SQLException { Thread t = Thread.currentThread(); JDBCLogger.startLogSqlQuery(t, sql); ResultSet r = realStatement.executeQuery(sql); JDBCLogger.endLogSqlQuery(t, sql); lastSql = sql; return new ResultSetWrapper(r, this, sql); }    public int executeUpdate(String sql) throws SQLException { Thread t = Thread.currentThread(); JDBCLogger.startLogSqlQuery(t, sql); int i = realStatement.executeUpdate(sql); JDBCLogger.endLogSqlQuery(t, sql); lastSql = sql; return i; } f

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