Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > Spring对JDBC封装时使用的一种CallBack来参数化一个操作的模式
【标  题】:Spring对JDBC封装时使用的一种CallBack来参数化一个操作的模式
【关键字】:Spring,JDBC,CallBack
【来  源】:http://blog.csdn.net/fuliangliang/archive/2006/11/04/1366544.aspx

Spring对JDBC封装时使用的一种CallBack来参数化一个操作的模式

Your Ad Here

 Spring对JDBC的封装避免了大量的JDBC低级操作,简化了代码,下面我们看看Spring除
了使用Template方法模式来简化我们编写的代码还是用了什么技巧。Spring使用了一种
叫做CallBackHandler的接口,你可以很容易扩展这个接口来获得想要查询到的结果,下
面举一个获得行信息的一个CallBackHandler,然后StringHandler实现获取查询到的String
的例子:

interface RowCallBackHandler{
    
public void abstract processRow(ResultSet rs)throws SQLException;
}


class StringHandler implements RowCallBackHandler{
    
private List list;
    
public void processRow(ResultSet rs)throws SQLException;{
        list.add(rs.getString(
1));
    }

    
    
public String[] getStrings(){
    
return (String[])list.toArray(new String[list.size()]))
    }

}


public class  JdbcTemplate{
    
//...other code
    public query(String sql,RowCallBackHandler callBackHandler){
        Connection con 
= null;
        PreparedStatement ps 
= null;
        ResultSet rs 
= null;
        
try{
            
// con = <code to get connetion>
            ps = con.prepareStatement(sql);
            rs.executeQuery();
            
while(rs.next()){
                callBackHandler.processRow(rs);
            }

            rs.close();
            ps.close();
        }
catch(SQLException e){
            e.printStackTrace();
        }
finally{
            DataSourceUtils.closeConnectonIfNecessary(
this.dataSource,con);
        }

    }

}


public class SimpleTest{
    
public static void main(String []args){
        StringHandler sh 
= new StringHandler();
        JdbcTemplate jdbcTemplate 
= new JdbcTemplate();
        jdbcTemplate.query(
"Select firstName from user",sh);
        String []str 
= sh.getStrings();
    }

}

 

这个模式关键的技巧是参数一个操作并JdbcTemplate中主动调用方法processRow(),将结
果集中的信息添加到List中,这个可以说一种控制反转的思想。查询的结果是在查询过程中
自动注入到我们的要接收查询结果的容器中的,用户不需要关心如何去获得查询结果,当需
要结果是只需要getStrings()获得。
用户只需要使用如下代码:
StringHandler sh = new StringHandler();
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.query("Select firstName from user",sh);
String []str = sh.getStrings();
就可以轻易获得查询的结果。
不过这个模式可以说更多的是一种技巧,直观程度不够,从而使代码不容易理解和维护。

写在前面的--如何测试你的代码:【上一篇】
理解HashMap:【下一篇】
【相关文章】
  • Testing in Spring Project (1)-DAO Test
  • Net 2.0 CallBack 流程
  • spring定时控制
  • 什么是jdbc?
  • Spring筆記
  • Spring XML配置十二个最佳实践
  • The Life of a request in Spring MVC
  • 从山丘锤王之死谈Spring AOP中的引介(Introduction)
  • 用JSR181驱动SpringSide Web Services
  • Spring OSGI Bundle项目的配置--修正了官方的错误
  • 【随机文章】
  • Building Scalable Cisco Internetworks Exam(BSCI 642-801)
  • 为类型库(Type Library)生成帮助文件
  • AJAX小经验之一:变量冲突处理
  • 完整的天翼脱机外挂(含控键)
  • Visual Studio 2005入门 之 结构化数据类型[二](枚举,结构)[视频]
  • Linux下软件的安装与卸载
  • Macromedia Authorware 6.0 授权认证培训
  • weblogic知识剪辑
  • RMAN备份恢复试验
  • Java中文问题及最优解决方法
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.