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 需要 ...
随机推荐
- 行为型-命令模式(Command)
装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇.在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯.排气扇并无直接关系,一 ...
- 【常见CPU架构对比】维基百科
Comparison of instruction set architectures https://en.wikipedia.org/wiki/Comparison_of_instruction_ ...
- LPCTSTR和LPTSTR和char *究竟有什么区别
LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...
- python's @property
[python's @property] 参考:http://docs.python.org/3/library/functions.html?highlight=property#property
- send anywhere真的好用啊
手机和电脑互传文件,方便很多.
- CentOS7.2部署KVM虚拟机
转自:http://www.linuxidc.com/Linux/2017-01/140007.htm 学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习Postg ...
- jquery.cookie 介绍 和 用法
1.依赖jQuery库 2.浏览器兼容性情况 3.下载 官方github:https://github.com/carhartl/jquery-cookie 4.使用 创建一个整站cookie $.c ...
- 如何提取kinect中深度图的点云数据
https://bbs.csdn.net/topics/391080654 在Matlab中调用Kinect教程:https://jingyan.baidu.com/article/af9f5a2d1 ...
- B-spline Curves 学习之B样条曲线性质(5)
B-spline Curves: Important Properties 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. ...
- An Introduction to Text Mining using Twitter Streaming
Text mining is the application of natural language processing techniques and analytical methods to t ...