快速业务通道

使用增强型PreparedStatement向JDBC代码增加日志功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
发所有方法调用(例如 setLong(int, long) 和 setString(int,String) ) 到“真实语句”。在这样做之前它将保存相关的参数值,从而它们可以用于生成日志输出结果。

表3介绍了 LoggableStatement 类如何实现 java.sql.PreparedStatement ,以及它如何使用JDBC连接和SQL模板作为输入来构建。

表3:LoggableStatement实现java.sql.PreparedStatement

public class LoggableStatement implements java.sql.PreparedStatement {     // used for storing parameter values needed     // for producing log     private ArrayList parameterValues;     // the query string with question marks as     // parameter placeholders     private String sqlTemplate;     // a statement created from a real database     // connection     private PreparedStatement wrappedStatement;    public LoggableStatement(Connection connection, String sql)     throws SQLException {     // use connection to make a prepared statement     wrappedStatement = connection.prepareStatement(sql);     sqlTemplate = sql;     parameterValues = new ArrayList();    }     }

LoggableStatement如何工作

表4介绍了 LoggableStatement 如何向 saveQueryParamValue() 方法添加一个调用,以及在方法 setLong 和 setString 的“真实语句”上调用相应的方法。我们采用与用于参数设置的所有方法(例如 setChar 、 setLong 、 setRef 和 setObj )相同的方式来增加 saveQueryParamValue() 调用。表4还显示了在不调用 saveQueryParamValue() 的情况下如何封装方法 executeQuery ,因为它不是一个“参数设置”方法。

表4:LoggableStatement 方法

public void setLong(int parameterIndex, long x)       throws java.sql.SQLException {     wrappedStatement.setLong(parameterIndex, x);     saveQueryParamValue(parameterIndex, new Long(x));    }    public void setString(int parameterIndex, String x)      throws java.sql.SQLException {     wrappedStatement.setString(parameterIndex, x);     saveQueryParamValue(parameterIndex, x);    }   public ResultSet executeQuery() throws java.sql.SQLException {     return wrappedStatement.executeQuery();    }

使用增强型PreparedStatement向JDBC代码增加日志功能(3)

时间:2011-02-04 IBM Jens Wyke

表5中显示了 saveQueryParamValue() 方法。它把每个参数值转换成 String 表示,保存以便 getQueryString 方法日后使用。缺省情况下,一个对象使用其 toString 方法将被转换成 String ,但如果对象是 String 或 Date ,它将用单引号('''')表示。 getQueryString() 方法使您能够从日志复制大多数查询并进行粘贴,无需修改交互式SQL处理器就可进行测试和调试。您可以根据需要修订该方法来转换其它类的参数值。

表5:saveQueryParamValue()方法

private void saveQueryParamValue(int position, Object obj) {     String strValue;     if (obj instanceof String || obj instanceof Date) {        // if we have a String, include '''' in the saved value        strValue = "''" + obj + "''";     } else {        if (obj == null) {        

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