//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