千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:首页 > 关于学院 > 技术论坛  >  正文

Java教程之ResultSetHandler下的常用结果集

时间:2018-06-08 11:36:30     来源:千锋教育 作者:千锋老师

ResultSetHandler下的常用结果集封装

//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

//ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

//ColumnListHandler:取某一列的数据。封装到List中。

//KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

//MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

//MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List

//ScalarHandler:适合取单行单列数据

BeanHandler:把每条记录封装成对象,适合取一条记录

BeanListHandler 把每条记录封装成对象,把对象存储到List集合中,适合取多条记录

接下来的文章我们会针对ResultSetHandler下的结果集处理器进行系统的案例分析,完成针对结果集的封装。

案例代码

1.MySQL数据库创建图书信息表

2.创建Book.java javabean类 -->略

3.建立CSP0连接池 -->略

4.根据需求,使用指定的结果集获取数据结果

千锋<a href=http://www.mobiletrain.org/ target=_blank class=infotextkey>Java培训</a>.png

 

首先我们先介绍最常用的结果集:

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.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.junit.Test;

import com.qf.bean.Book;

import com.qf.utils.C3P0Utils;

public class Demo_Query {

//1.BeanHandler 把每条记录封装成对象 适合取一条记录

@Test

public void testQuery2(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

try {

Book b =

qr.query("select * from book where id=?", new BeanHandler<Book>(Book.class),1);

System.out.println(b);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//2.BeanListHandler 把每条记录封装成对象 将对象存储到List集合中

@Test

public void testQuery3(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

try {

List<Book> list =

qr.query("select * from book where id=? or id=?", new BeanListHandler<Book>(Book.class), 2,9);

System.out.println(list);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//3.ArrayHandler 适合取一条记录 把该记录的每一列值存储到一个数组中 Object[]

@Test

public void testQuery3() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object[] arr = qr.query("select * from book where id=1", new ArrayHandler());

for(Object obj : arr){

System.out.println(obj);

}

}

//4.ArrayListHandler 适合取多条记录 把该记录的每一列值存储到一个数组中 Object[]然后把数组封装到集合中

@Test

public void testQuery4() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Object[]> list = qr.query("select * from book", new ArrayListHandler());

for(Object[] obj:list){

for(Object o : obj){

System.out.print(o+",");

}

System.out.println();

}

}

//5.ColumnListHandler 获取某一列的数据 封装到List集合中

@Test

public void testQuery5() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Object> list = qr.query("select * from book", new ColumnListHandler(2));//可以根据列号 从1开始 /列名

for(Object obj:list){

System.out.println(obj);

}

}

//6.MapHandler 适合取一条记录 把当前记录的列名 和 列值 放到一个Map中

@Test

public void testQuery6() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Map<String, Object> map = qr.query("select * from book where id=1", new MapHandler());

for(Map.Entry<String, Object> entry : map.entrySet()){

System.out.println(entry.getKey()+"::"+entry.getValue());

}

}

//7.KeyedHandler 取多条记录

//每条记录封装到Map中 再把Map封装到另一个Map中

// Map<key,Map<key,value>>

// 内Map :key字段名 value:字段值

// 外Map :key指定字段的值 value:内Map

//key 为指定的字段值

@Test

public void testQuery7() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Map<Object, Map<String,Object>> map = qr.query("select * from book", new KeyedHandler("id"));

for(Map.Entry<Object, Map<String,Object>> entry : map.entrySet()){

System.out.println(entry.getKey());

for(Map.Entry<String, Object> e : entry.getValue().entrySet()){

System.out.println(e.getKey()+";;;;"+e.getValue());

}

System.out.println("-------------");

}

}

//8.MapListHandler 适合取多条记录 把当前记录封装到Map中 再把Map封装到List中

@Test

public void testQuery8() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

List<Map<String, Object>>list = qr.query("select * from book", new MapListHandler());

for(Map<String, Object> map : list){

for(String key : map.keySet()){

System.out.println(key+";;;;"+map.get(key));

}

System.out.println("--------------");

}

}

//9.ScalarHandler 适合取单行单列数据

@Test

public void testQuery9() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object obj = qr.query("select count(*) from book", new ScalarHandler());

System.out.println(obj);

}

}

以上代码是针对查询,给出的对应操作。当然,我们实际工作中不只有查询,还会涉及到一些增删改以及批量处理的功能。这时候我们就要使用QueryRunner类中的另外两个方法来完成了。他们分别是:

update() 用于执行insert update delete

batch() 批处理 可执行多条语句 批量

QueryRunner update()方法的使用 案例代码

package com.qf.dbutils;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import org.junit.Test;

import com.qf.utils.C3P0Utils;

//update()

public class Demo_Update {

@Test

public void testInsert01() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "insert into book(name,price,num) values('html',10,12)";

qr.update(sql);

}

@Test

public void testInsert02() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "insert into book(name,price,num) values(?,?,?)";

qr.update(sql, "photoshop",23,6);

}

@Test

public void testUpdate(){

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "update book set price=? where id=1";

try {

qr.update(sql,80);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void testDelete() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "delete from book where id=13";

qr.update(sql);

}

@Test

public void testDelete2() throws SQLException{

//1.获取QueryRunner 对象

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

String sql = "delete from book where name like ?";

qr.update(sql,"%java%");

}

}

QueryRunner batch()方法的使用 案例代码

package com.qf.dbutils;

import java.sql.SQLException;

import java.util.Arrays;

import org.apache.commons.dbutils.QueryRunner;

import org.junit.Test;

import com.qf.utils.C3P0Utils;

public class Demo_Batch {

/*

* batch() 方法 是批量处理

* 所需要的参数包括一个二维数组

* Object[][] params = new Object[5][]; 高维 的数 5 决定是执行sql语句的次数

* 低维数组的元素 就是给 sql语句 ? 赋值的

* */

@Test

public void testBatchInsert() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

//batch方法 第二个参数 是一个二维数组 所以 我们先创建一个二维数组

Object[][] params = new Object[5][];

//给二维数组中 每一个一维数组的元素 进行赋值

for(int i=0;i<params.length;i++){

params[i] = new Object[]{"html",22,39};

}

int[] arr = qr.batch("insert into book(name,price,num) values(?,?,?)", params);

System.out.println(Arrays.toString(arr));

}

@Test

public void testBatchDelete() throws SQLException{

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

Object[][] params = new Object[3][];

for(int i=0;i<params.length;i++){

params[i] = new Object[]{i};

}

qr.batch("delete from book where id=?", params);

}

}

千锋Java培训作为中国IT研发人才一体化服务的开拓者,为学生制定合理有序的学习计划,0学费入学,2周免费试听不满意不收费,与学员签订就业协议,坚持良心面授,从千锋Java培训班出去的学员均已高薪就业。千锋推出的免费java视频教程,让学员能够方面的巩固基础技术能力。

 

相关文章

  • 北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
    咨询电话: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大学城)
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990 021-65233829-609
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55191750
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 广州校区地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 武汉金融港校区地址:武汉市东湖高新技术开发区光谷大道77号金融港B18栋3楼
    武汉智慧园校区地址:武汉市东湖高新技术开发区光谷大道61号智慧园21栋2楼
    咨询电话:027-59313371
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-811-9990 028-83178771
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85363390
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 杭州校区地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:400-811-9990 0571-86893632
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
    咨询电话:0532-80911190
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-811-9990 023-68883009
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513210
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
    咨询电话:400-811-9990/0451-87173191
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱