操纵加强型PreparedStatement向JDBC代码增添日记过效[Java编程]
本文“操纵加强型PreparedStatement向JDBC代码增添日记过效[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在大大都情形下,JDBC PreparedStatements 使履行数据库查询更简便并可以明显晋升您整体利用程序的性能.当谈到日记查询语句时 PreparedStatement 接口就显得有些不足了. PreparedStatement 的上风在于其可变性,但是一个好的日记条目必须精确描写若何将SQL发送到数据库,它将密切关注用实际的参数值来替换全部参数占位符.固然有多种办法可以办理这一难题,但没有任何一种易于大规模实施并且大部份将扰乱您的程序代码.
在本文中,您将理解到若何扩大JDBC PreparedStatement 接口来举行查询日记. LoggableStatement 类实现 PreparedStatement 接口,但增添用于得到查询字符串的办法,利用一种实用于记录的格局.利用 LoggableStatement 类可以削减日记代码中发生错误的概率,生成简单且易于管理的代码.
注意:本文假定您有丰富的JDBC和 PreparedStatement 类经验.
典型日记办理筹划
表1介绍了数据库查询时普通是若何利用 PreparedStatement (固然忽视了初始化和错误处理).在本文中,我们将利用SQL query SELECT 做为例子,但谈论利用别的范例的SQL语句,如 DELETE 、 UPDATE 和 INSERT .
表1:一个典型的SQL数据库查询
String sql = "select foo, bar from foobar where foo < ? and bar = ?";
String fooValue = new Long(99);
String barValue = "christmas";
Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setLong(1,fooValue);
pstmt.setString(2,barValue);
ResultSet rs = pstmt.executeQuery();
// parse result...
表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 没有此类办法,我们必须自己实现.
以上是“操纵加强型PreparedStatement向JDBC代码增添日记过效[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |