WEB开发网
开发学院软件开发Java JDBC 查询日志变得简单:使用增强型PreparedState... 阅读

JDBC 查询日志变得简单:使用增强型PreparedStatement向JDBC代码增加日志功能

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 表1中一个好的查询日志条目看起来应与下面有几分类似:Executingquery:selectfoo,barfromfoobarwherefoo<99andbar='christmas'下面是查询的日志代码的一个例子,注意:表1中的问号已经被每个参数的值替换,JDBC 查询

表1中一个好的查询日志条目看起来应与下面有几分类似:

Executing query: select foo,bar from foobar where foo < 99 and 
bar='christmas' 

下面是查询的日志代码的一个例子。注意:表1中的问号已经被每个参数的值替换。

System.out.println("Executing query: select foo, bar from foobar where foo 
< "+fooValue+" and bar = '+barValue+"'") 

一种更好的方法是创建方法,我们称之为 replaceFirstQuestionMark ,它读取查询字符串并用参数值替换问号,如表2所示。这类方法的使用无需创建复制的字符串来描述SQL语句。


表 2:使用replaceFirstQuestionMark来进行字符串替换

   // listing 1 goes here 
   sql = replaceFirstQuestionMark(sql, fooValue); 
   sql = replaceFirstQuestionMark(sql, barValue); 
   System.out.println("Executing query: "+sql); 

虽然这些解决方案都易于实施,但没有一种是完美的。问题是在更改SQL模板的同时也必须更改日志代码。您将在某一点上犯错几乎是不可避免的。查询将更改但您忘记了更新日志代码,您将结束与将发送到数据库的查询不匹配的日志条目 -- 调试恶梦。

我们真正需要的是一种使我们能够一次性使用每个参数变量(在我们的实例中为 fooValue 和 barValue )的设计方案。我们希望有一种方法,它使我们能够获得查询字符串,并用实际的参数值替换参数占位符。由于 java.sql.PreparedStatement 没有此类方法,我们必须自己实现。

上一页  1 2 3 4 5  下一页

Tags:JDBC 查询 日志

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接