博客专栏

EEPW首页 > 博客 > java视频教程之ResultSetHandler常用结果集封装分享

java视频教程之ResultSetHandler常用结果集封装分享

发布人:扣丁学堂2 时间:2021-04-22 来源:工程师 发布文章

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

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

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

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

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

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

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

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

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

接下来扣丁学堂小编针对Java在线学习之ResultSetHandler常用结果集封装案例分析,完成针对结果集的封装。

案例代码

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

2.创建Book.javajavabean类-->略

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

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


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

  importjava.sql.ResultSet;
  importjava.sql.SQLException;
  importjava.util.ArrayList;
  importjava.util.List;
  importorg.apache.commons.dbutils.QueryRunner;
  importorg.apache.commons.dbutils.ResultSetHandler;
  importorg.apache.commons.dbutils.handlers.BeanHandler;
  importorg.apache.commons.dbutils.handlers.BeanListHandler;
  importorg.junit.Test;
  importcom.qf.bean.Book;
  importcom.qf.utils.C3P0Utils;
  publicclassDemo_Query{
  //1.BeanHandler把每条记录封装成对象适合取一条记录
  @Test
  publicvoidtestQuery2(){
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  try{
  Bookb=
  qr.query("select*frombookwhereid=?",newBeanHandler<Book>(Book.class),1);
  System.out.println(b);
  }catch(SQLExceptione){
  //TODOAuto-generatedcatchblock
  e.printStackTrace();
  }
  }
  //2.BeanListHandler把每条记录封装成对象将对象存储到List集合中
  @Test
  publicvoidtestQuery3(){
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  try{
  List<Book>list=
  qr.query("select*frombookwhereid=?orid=?",newBeanListHandler<Book>(Book.class),2,9);
  System.out.println(list);
  }catch(SQLExceptione){
  //TODOAuto-generatedcatchblock
  e.printStackTrace();
  }
  }
  //3.ArrayHandler适合取一条记录把该记录的每一列值存储到一个数组中Object[]
  @Test
  publicvoidtestQuery3()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Object[]arr=qr.query("select*frombookwhereid=1",newArrayHandler());
  for(Objectobj:arr){
  System.out.println(obj);
  }
  }
  //4.ArrayListHandler适合取多条记录把该记录的每一列值存储到一个数组中Object[]然后把数组封装到集合中
  @Test
  publicvoidtestQuery4()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  List<Object[]>list=qr.query("select*frombook",newArrayListHandler());
  for(Object[]obj:list){
  for(Objecto:obj){
  System.out.print(o+",");
  }
  System.out.println();
  }
  }
  //5.ColumnListHandler获取某一列的数据封装到List集合中
  @Test
  publicvoidtestQuery5()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  List<Object>list=qr.query("select*frombook",newColumnListHandler(2));//可以根据列号从1开始/列名
  for(Objectobj:list){
  System.out.println(obj);
  }
  }
  //6.MapHandler适合取一条记录把当前记录的列名和列值放到一个Map中
  @Test
  publicvoidtestQuery6()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Map<String,Object>map=qr.query("select*frombookwhereid=1",newMapHandler());
  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
  publicvoidtestQuery7()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Map<Object,Map<String,Object>>map=qr.query("select*frombook",newKeyedHandler("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
  publicvoidtestQuery8()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  List<Map<String,Object>>list=qr.query("select*frombook",newMapListHandler());
  for(Map<String,Object>map:list){
  for(Stringkey:map.keySet()){
  System.out.println(key+";;;;"+map.get(key));
  }
  System.out.println("--------------");
  }
  }
  //9.ScalarHandler适合取单行单列数据
  @Test
  publicvoidtestQuery9()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Objectobj=qr.query("selectcount(*)frombook",newScalarHandler());
  System.out.println(obj);
  }
  }
  以上代码是针对查询,给出的对应操作。当然,我们实际工作中不只有查询,还会涉及到一些增删改以及批量处理的功能。这时候我们就要使用QueryRunner类中的另外两个方法来完成了。他们分别是:
  update()用于执行insertupdatedelete
  batch()批处理可执行多条语句批量
  QueryRunnerupdate()方法的使用案例代码
  packagecom.qf.dbutils;
  importjava.sql.SQLException;
  importorg.apache.commons.dbutils.QueryRunner;
  importorg.junit.Test;
  importcom.qf.utils.C3P0Utils;
  //update()
  publicclassDemo_Update{
  @Test
  publicvoidtestInsert01()throwsSQLException{
  //1.获取QueryRunner对象
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Stringsql="insertintobook(name,price,num)values('html',10,12)";
  qr.update(sql);
  }
  @Test
  publicvoidtestInsert02()throwsSQLException{
  //1.获取QueryRunner对象
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Stringsql="insertintobook(name,price,num)values(?,?,?)";
  qr.update(sql,"photoshop",23,6);
  }
  @Test
  publicvoidtestUpdate(){
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Stringsql="updatebooksetprice=?whereid=1";
  try{
  qr.update(sql,80);
  }catch(SQLExceptione){
  //TODOAuto-generatedcatchblock
  e.printStackTrace();
  }
  }
  @Test
  publicvoidtestDelete()throwsSQLException{
  //1.获取QueryRunner对象
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Stringsql="deletefrombookwhereid=13";
  qr.update(sql);
  }
  @Test
  publicvoidtestDelete2()throwsSQLException{
  //1.获取QueryRunner对象
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Stringsql="deletefrombookwherenamelike?";
  qr.update(sql,"%java%");
  }
  }
  QueryRunnerbatch()方法的使用案例代码
  packagecom.qf.dbutils;
  importjava.sql.SQLException;
  importjava.util.Arrays;
  importorg.apache.commons.dbutils.QueryRunner;
  importorg.junit.Test;
  importcom.qf.utils.C3P0Utils;
  publicclassDemo_Batch{
  /*
  *batch()方法是批量处理
  *所需要的参数包括一个二维数组
  *Object[][]params=newObject[5][];高维的数5决定是执行sql语句的次数
  *低维数组的元素就是给sql语句?赋值的
  **/
  @Test
  publicvoidtestBatchInsert()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  //batch方法第二个参数是一个二维数组所以我们先创建一个二维数组
  Object[][]params=newObject[5][];
  //给二维数组中每一个一维数组的元素进行赋值
  for(inti=0;i<params.length;i++){
  params[i]=newObject[]{"html",22,39};
  }
  int[]arr=qr.batch("insertintobook(name,price,num)values(?,?,?)",params);
  System.out.println(Arrays.toString(arr));
  }
  @Test
  publicvoidtestBatchDelete()throwsSQLException{
  QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
  Object[][]params=newObject[3][];
  for(inti=0;i<params.length;i++){
  params[i]=newObject[]{i};
  }
  qr.batch("deletefrombookwhereid=?",params);
  }
  }


以上就是关于扣丁学堂java在线学习之ResultSetHandler常用结果集封装的详细介绍,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网查询。扣丁学堂是专业的Java培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员挂看学习哦。扣丁学堂java技术交流群:487098661。微信号:codingbb

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: Java视频

技术专区

关闭