手工的开始QueryRunner类。实现数据封装:

 MapListHandler

MapHandler

BeanListHandler

BeanHandler

第一步:基本的封装测试

写一个类,QueryRunner,实现一个方法query(sql)- List<map>

package cn.itcast.dbutils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
public class QueryRunner {
//接收一个ds
private DataSource ds;
public QueryRunner() {
}
public QueryRunner(DataSource ds) {
this.ds = ds;
}
/**
* 只封装成List<Map>
*/
public List<Map<String,Object>> query(String sql){
//封装数据用
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();//声明返回的对象
Connection con = null;
try{
con = ds.getConnection();
//执行查询
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
//分析结果集
ResultSetMetaData rsmd = rs.getMetaData();
//获取列数
int cols = rsmd.getColumnCount();
//遍历数据
while(rs.next()){
//一行数据
Map<String,Object> mm = new HashMap<String, Object>();
//遍历列
for(int i=;i<cols;i++){
//获取列名
String colName = rsmd.getColumnName(i+);
//获取数据
Object val = rs.getObject(i+);
//封装到map
mm.put(colName, val);
}
//将这个map放到list
list.add(mm);
} }catch(Exception e){
throw new RuntimeException(e);
}finally{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
}

用回调函数实现数据的动态封装

回调是指在执行时,具体的封装处理工用由第三方的类来实现。

回调一般由两部分组成:

1:调用类 - QueryRunner。实例类

2:回调规范 – ResultSetHandler。一般是一个接口。

3:回调规范定义回调方法且这个方法由调用类调用。

package cn.itcast.demo;

import java.util.ArrayList;

import java.util.List;

import org.junit.Test;

public class ThreadDemo {

/**

* 测试泛型

* @throws Exception

*/

@Test

public void aa() throws Exception{

//泛型,在运行时是没有地。

List<String> list = new ArrayList<String>();

list.add("ddd");

List list2 = list;

list2.add(777);

list.getClass().getMethod("add",Object.class).invoke(list,909);

for(Object o:list){

System.err.println(o+","+o.getClass());

}

}

/**

* 测试线程

* @param args

*/

public static void main(String[] args) {

new Thread(

new Runnable() {

public void run() {

System.err.println("B这是runnable.run。。。。");

}

}

){

public void run() {

super.run();//调用父类的方法,以执行runnalble.run

System.err.println("A这是thread.run....");

};

}.start();

}

}

java—将查询的结果封装成List<Map>与用回调函数实现数据的动态封装(44)的更多相关文章

  1. ybatis中查询出多个以key,value的属性记录,封装成一个map返回的方法

    可以采用值做映射,也可以不采用映射方式 <resultMap id="configMap" type="java.util.Map" > <r ...

  2. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  3. MyBatis的foreach查询(List、Array、Map)

    mybatis 中 foreach collection的三种用法 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index ...

  4. hibernate将本地SQL查询结果封装成对象

    hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...

  5. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  6. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法

    最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...

  7. Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

    上一篇随笔中已经说了简单的Jar是如何封装的,但是我的需求是根据TIPTOP的查询条件产生XML文件并上传到FTP主机中,那么就要涉及到XML生成的方法和FTP上传的方法 所以在Eclipse写的时候 ...

  8. java将类和函数封装成jar,然后在别的项目中使用这个jar包

    本来想用idea安装的,不过用maven生成后发现jar有20,30M肯定不对,后来还是用eclipse生成了,方便很多 环境: eclipse luna,jdk1.8_112 1.生成jar包,首先 ...

  9. 【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。

    Eclipse中导入外部jar包 在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可. 工具/原料 Eclipse 需要 ...

随机推荐

  1. segment_object_model_3d

    * *********************************************************************** * This example program sho ...

  2. 机器学习算法中GBDT和XGBOOST的区别有哪些

    首先xgboost是Gradient Boosting的一种高效系统实现,并不是一种单一算法.xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear).而GBD ...

  3. x64位windows 2003 server中“Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败”问题

    给朋友看一个老asp网站图片不能上传问题,试过网上各种办法都提示: Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败 最终问题出在x6 ...

  4. 26.Remove Duplicates from Sorted Array(Array)

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  5. 23.Merge k Sorted Lists (Array, Queue; Sort)

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...

  6. [Java] Java API文档下载方法

    Java API文档下载方法:http://jingyan.baidu.com/article/a3aad71ac9e48fb1fb009692.html Oracle : http://www.or ...

  7. JavaScript 操作对象属性(设置属性, setter/getter, 序列化)

    参考自<<JavaScript权威指南 第6版>>, 文字太多反而不易理清其中的关系, 直接上代码和注释 /* * 对象的setter和getter属性: * 定义为一个或者两 ...

  8. 3 python之基础概要

    一: 与用户交互 1 什么事与用户交互 程序等待用户输入一些数据,程序执行完毕之后为用户反馈信息 2 为什么程序要与用户交互 为了让计算机像人一样和用户沟通 3 如何用: 在python3中:inpu ...

  9. zTree的简单使用

    理论可以看:http://www.cnblogs.com/shinhwazt/p/5828031.html zTree包:链接:http://pan.baidu.com/s/1eR4xP6M 密码:w ...

  10. AngularJS-$scope类

    一.$scope的作用 用来在controller和view中进行数据.事件的传递 二.$scope和$rootscope的区别 1.$rootscope根作用域 2.$rootscope可以实现多个 ...