2018-06-06 14:09:05 431浏览
//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]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技术交流群:670348138
【关注微信公众号获取更多学习资料】