java—将查询的结果封装成List<Map>与用回调函数实现数据的动态封装(44)
手工的开始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)的更多相关文章
- ybatis中查询出多个以key,value的属性记录,封装成一个map返回的方法
可以采用值做映射,也可以不采用映射方式 <resultMap id="configMap" type="java.util.Map" > <r ...
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...
- MyBatis的foreach查询(List、Array、Map)
mybatis 中 foreach collection的三种用法 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index ...
- hibernate将本地SQL查询结果封装成对象
hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...
- Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误
上一篇随笔中已经说了简单的Jar是如何封装的,但是我的需求是根据TIPTOP的查询条件产生XML文件并上传到FTP主机中,那么就要涉及到XML生成的方法和FTP上传的方法 所以在Eclipse写的时候 ...
- java将类和函数封装成jar,然后在别的项目中使用这个jar包
本来想用idea安装的,不过用maven生成后发现jar有20,30M肯定不对,后来还是用eclipse生成了,方便很多 环境: eclipse luna,jdk1.8_112 1.生成jar包,首先 ...
- 【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。
Eclipse中导入外部jar包 在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可. 工具/原料 Eclipse 需要 ...
随机推荐
- jeesite快速开发平台(一)----简介
转自:https://blog.csdn.net/u011781521/article/details/54880170
- Guide to installing 3rd party JARs
Although rarely, but sometimes you will have 3rd party JARs that you need to put in your local repos ...
- Guidelines for Installing Oracle HR Sample Schemas
All scripts necessary to install sample schemas reside in $ORACLE_HOME/demo/schema directory. Before ...
- BeanUtils.copyProperties不能copy复杂对象List的解决方式
需要注意的就是把List拆分,遍历add,然后把list设置到返回对象中 package test.test; import java.util.ArrayList; import java.util ...
- 在CentOS上安装tomcat
先从tomcat网站上下载最新的gz安装包 文件名:apache-tomcat-8.0.8.tar.gz 将文件上传到/usr/local目录中 执行解压缩 tar zxvf apache-tomca ...
- Radial Blur
[Radial Blur] 核心代码如下: v2f vert (appdata_img v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.u ...
- python's mutable & immutable
[python's mutable & immutable] python里面的类型其实也分为immutable和mutable二种,对于mutable,如果b指向a,当b改变时,a也会改变: ...
- Java 设计模式系列(十二)代理模式
Java 设计模式系列(十二)代理模式 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. package com.github.binarylei.de ...
- 让Ubuntu使用阿里云国内源,解决下载速度慢问题。
阿里云镜像官方地址 http://mirrors.aliyun.com/ 找到最新源地址列表: http://www.linuxdiyf.com/linux/23163.html 软件包管理中心(推荐 ...
- [.NET] WeakReference的使用
声明:本篇博客翻译自:http://tipsandtricks.runicsoft.com/CSharp/WeakReferences.html 由于水平(技术水平+英语理解能力)有限/不足,肯定会有 ...