手工的开始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. linux 使用systemctl 启动服务报错: Error: No space left on device

    By default, Linux only allocates 8192 watches for inotify, which is ridiculously low. And when it ru ...

  2. spring boot 1

    1.创建项目. meven可以配置阿里云meven镜像 <mirror> <id>nexus-aliyun</id> <mirrorOf>central ...

  3. Java项目的结构

    -------siwuxie095             以 Hello World 为例     这个工程用一个文件夹表示,被放置在左侧的资源管理面板 Package Explorer 中     ...

  4. C++ 文件类型分析

    .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度.资源辅助文件. .BMP:位图资源文件. .BSC:浏览信息文件,由浏览信息维护工具( ...

  5. 分布式java应用基础与实践

      始读于2014年4月30日,完成于2014年6月6日15:43:39. 阿里巴巴高级研究员林昊早年的书了,这些理论放到今天估计工作一两年的人都耳熟能详了,我个人很早以前就知道此书一直没有找到资源, ...

  6. 如何查看服务器(linux系统)当前的负载信息(转)

    如何查看服务器当前的负载信息http://www.flybaaa.com/help 网吧内突然很卡,这个情况我相信大家都有遇见过,但是通过什么方法来排查是否linux服务器的负载过大导致的这个问题呢? ...

  7. Scheduling the Delivery of Local Notifications

    [Scheduling the Delivery of Local Notifications] Apps can use local notifications to display alerts, ...

  8. String 、 StringBuffer 和 StringBuilder

    StringBuffer (一个线程安全的可变字符串序列,用于多线程) A thread-safe, mutable sequence of characters. StringBuilder (可变 ...

  9. java并发编程实战:第十三章----显示锁

    一.Lock与ReentrantLock Lock接口中定义了一种无条件.可轮询的.定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的. 1 public interfece Lock 2 ...

  10. Intel Cyclone SoC FPGA介绍

    3.1 Intel Cyclone SoC FPGA介绍 3.1.1 SoC FPGA的基本概念 Intel Cyclone V SoC FPGA是Intel PSG(原Altera)于2013年发布 ...