JResultSetHandler下的常用结果集

  //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.根据需求,使用指定的结果集获取数据结果

1


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

  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 BeanHandlerBook(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 {

  ListBook list =

  qr.query(select * from book where id=? or id=?, new BeanListHandlerBook(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());

  ListObject[] 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());

  ListObject 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());

  MapString, Object map = qr.query(select * from book where id=1, new MapHandler());

  for(Map.EntryString, Object entry : map.entrySet()){

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

  }

  }

  //7.KeyedHandler取多条记录

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

  // Mapkey,Mapkey,value

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

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

  //key为指定的字段值

  @Test

  public void testQuery7() throws SQLException{

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

  MapObject, MapString,Object map = qr.query(select * from book, new KeyedHandler(id));

  for(Map.EntryObject, MapString,Object entry : map.entrySet()){

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

  for(Map.EntryString, 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());

  ListMapString, Objectlist = qr.query(select * from book, new MapListHandler());

  for(MapString, 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;iparams.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;iparams.length;i++){

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

  }

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

  }

  }

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/80624236