今天小编给大家分享一下JDBC查询日志记录的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在大多数情况下,JDBCPreparedStatement
使执行数据库查询变得更加容易,并且可以显著提高你的整体应用程序性能。但是PreparedStatement
当涉及到记录查询语句时,该接口就不够用了。尽管 aPreparedStatement
的优势在于其可变性,但一个好的日志条目必须准确描述发送到数据库的 SQL 在所有参数占位符已被实际参数值替换后的外观。尽管有多种方法可以解决这个难题,但没有一种方法可以轻松大规模实现,而且大多数方法都会使你的代码变得混乱。在本文中,你将学习如何扩展 JDBCPreparedStatement
接口以进行查询日志记录。虽然LoggableStatement
类实现的PreparedStatement
接口,但增加了在适合于记录的格式获得查询字符串的方法。使用LoggableStatement
该类既可以减少日志代码中的错误发生率,又可以随着时间的推移生成更整洁、更易于管理的代码。请注意,本文假设你之前有使用 JDBC 和PreparedStatement
类的经验。清单 1 说明了PreparedStatement
在进行数据库查询时通常如何使用 a
(尽管省略了初始化和错误处理)。我们将使用SQL查询SELECT我们的例子在这篇文章中,但讨论也同样适用于其他类型的SQL语句如DELETE,UPDATE和INSERT。清单 1 中查询的良好日志条目可能如下所示:
下面是该条目的日志记录代码外观的一个示例。请注意,清单 1 中的问号已替换为每个参数的值。
更好的方法是创建一个方法,我们称之为replaceFirstQuestionMark
,它接受查询字符串并用参数值替换问号,如清单 2 所示。使用这种方法消除了创建重复字符串来描述的需要SQL 语句。
虽然易于实施,但这些解决方案都不是理想的。问题是,每当对 SQL 模板进行更改时,日志记录代码也必须更改。在某些时候你会犯错误几乎是不可避免的。查询将被更改,但您将忘记更新日志记录代码,并且你最终会得到与发送到数据库的查询不匹配的日志条目——这是调试噩梦。
我们真正需要的是一个设计,让我们使用的每个参数变量(fooValue
和barValue
在我们的例子)只有一次。我们想要一种方法,它可以让我们获取参数占位符替换为实际值的查询字符串。因为java.sql.PreparedStatement
没有这样的方法,我们必须自己实现一个。我们的自定义实现PreparedStatement
将充当 JDBC 驱动程序提供的“真实语句”的包装器。包装器语句会将所有方法调用(例如,setLong(int, long)
和setString(int,String))
转发到“真实语句”。在这样做之前,它将保存相关的参数值,以便它们可用于生成日志输出。清单 3 显示了LoggableStatement
类是如何实现的java.sql.PreparedStatement
,以及它是如何使用 JDBC 连接和 SQL 模板作为输入来构建的。LoggableStat免费云主机域名ement 如何工作
清单 4 说明了LoggableStatement
如何添加对saveQueryParamValue()
方法的调用,以及如何在方法setLong
和setString
的 real语句
上调用相应的方法。saveQueryParamValue()
调用以类似的方式添加到用于参数设置的所有方法(例如setChar
,setLong
、setRef
、 和setObj
)。清单 4 还展示了在不调用saveQueryParamValue()
的情况下如何包装方法executeQuery
,因为它不是“参数设置”方法。saveQueryParamValue()
方法如清单 5 所示。它将每个参数值转换为一种String
表示形式,并将其保存以供该getQueryString
方法以后使用。默认情况下,对象将String
使用其toString
方法转换为 a
,但如果对象是 aString
或 aDate
,它将用单引号 (")
括起来。getQueryString()
方法允许你从日志中复制大多数查询并将它们粘贴到交互式 SQL 处理器中进行测试和调试,而无需修改。你可以根据需要修改该方法以转换其他类的参数值。
当使用标准方法设置所有参数时,我们只需调用我们的getQueryString()
方法LoggableStatement
来获取查询字符串。所有问号都将替换为实际参数值,这些值已准备好输出到我们选择的日志记录目的地。
清单 6 显示了如何将清单 1 和 2 中的代码更改为使用LoggableStatement
。在我们的应用程序代码引入LoggableStatement
解决了重复参数变量的问题。当对SQL模板进行更改时,我们只需要更新PreparedStatement
参数设置调用(例如,添加pstmt.setString(3,"new-param-value")
)。更改将反映在日志输出中,无需对日志代码进行任何手动更新。以上就是“JDBC查询日志记录的方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
相关推荐: react 16.8版本新特性及对react开发的影响是什么
本篇内容主要讲解“react16.8版本新特性及对react开发的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react16.8版本新特性及对react开发的影响是什么”吧!Facebook团队对社区上…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。