基于DBUtils中的查询对Java中的回调函数的理解
来源:互联网 发布:外贸网站建设推广优化 编辑:程序博客网 时间:2024/05/21 17:17
对回调函数的理解一直不是很深刻。今天在学习Utils框架的查询方法时候又遇到了这个概念。搜索资料,作出以下整理:
首先对回调函数做一个定义:当方法a调用方法b,而方法b在执行过程中,其中的一些逻辑需要方法a来告知,此时需要a在调用方法b
时将逻辑传入,而Java中是不允许传递java源代码,此时可以使用回调。所谓回调,就是方法a和方法b约定一个接口定义一个方法,方法的名字通常叫做handler方法
将逻辑传入,方法b在执行过程中需要执行a传入的逻辑时,调用接口实现的handler方法即可。此时a调用b时,b回来调用a传入的逻辑,这个过程就叫做回调。
package com.test.dbutils;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.ResultSetHandler;import org.junit.Test;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DBUtilsQuery {public void MyQuery() throws Exception {MyQueryRunner runner = new MyQueryRunner(new ComboPooledDataSource());runner.query("select * from account where money>?",new MyResultSetHandler<List<Account>>() {public List<Account> handle(ResultSet rs)throws SQLException {List<Account> list = new ArrayList<Account>();while (rs.next()) {Account acc = new Account();acc.setId(rs.getInt("id"));acc.setMoney(rs.getInt("money"));list.add(acc);}return list;}}, 999);} }}MyQueryRunner类:
package com.test.dbutils;import java.sql.Connection;import java.sql.ParameterMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import javax.sql.DataSource;import org.apache.commons.dbutils.DbUtils;public class MyQueryRunner {private DataSource source = null;public MyQueryRunner(){}public MyQueryRunner(DataSource source) {this.source = source;}public <T> T query(String sql,MyResultSetHandler<T> rs,Object...param) throws Exception{Connection connection=source.getConnection();PreparedStatement ps = connection.prepareStatement(sql); //获取参数元数据 ParameterMetaData metaData = ps.getParameterMetaData();//获取参数个数int count = metaData.getParameterCount();//设置参数for (int i = 0; i <=count; i++) {ps.setObject(i,param[i-1]);}//执行查询命令 获取结果集ResultSet result= ps.executeQuery(); //但是并不知道怎么处理结果集 处理的方法是从DBUtilsQuery类里面传过来的 这里就用到了回调 T t = rs.handle(rs);//rs就是具体实现方法DbUtils.closeQuietly(connection, ps, result);return t;}}MyResultSetHandler类:
package com.test.dbutils;import java.sql.ResultSet;import java.sql.SQLException;public interface MyResultSetHandler<T> {public T handle(ResultSet rs) throws SQLException;}
按照上面的说法:
MyQuery方法就是a方法,query方法就是b方法,但是query方法中的第二个参数实现了接口MyResultSetHandler
本文只是利用DBUtils框架中的查询对回调进行了讲解。不足之处,敬请见谅
0 0
- 基于DBUtils中的查询对Java中的回调函数的理解
- java中的回调函数理解
- 深刻理解java中的回调函数
- java中的回调函数理解
- 对Java回调函数的理解
- 对基于javascript的回调函数的理解
- Java中的回调函数的用法
- JAVA中的回调函数
- java中的回调函数
- JAVA中的回调函数
- java中的回调函数
- java中的回调函数
- java中的回调函数
- java中的回调函数
- java中的回调函数
- java中的回调函数
- 我对Java中回调函数的理解
- 我对Java中回调函数的理解
- linux常用命令总结
- 非常方便地实现Window与Ubuntu共享文本字符串
- 7,鼠标学习三——焦点切换
- Search Insert Position
- HDU 5289 Assignment
- 基于DBUtils中的查询对Java中的回调函数的理解
- POJ3264
- cookie和session
- 配置AVD可以上网
- 关于spring+springMVC+myBatis的一些基础配置以及整合
- poj-2409 Let it Bead
- 互联网公司与团队的技术选型 --新技术、成熟技术和小众技术
- arc4random()
- uva 116 Unidirectional TSP 单向TSP 问题,经典dP(路径输出注意规划方向)