java視頻教程之ResultSetHandler常用結(jié)果集封裝分享
//ArrayHandler:適合取1條記錄。把該條記錄的每列值封裝到一個數(shù)組中Object[]
//ArrayListHandler:適合取多條記錄。把每條記錄的每列值封裝到一個數(shù)組中Object[],把數(shù)組封裝到一個List中
//ColumnListHandler:取某一列的數(shù)據(jù)。封裝到List中。
//KeyedHandler:取多條記錄,每一條記錄封裝到一個Map中,再把這個Map封裝到另外一個Map中,key為指定的字段值。
//MapHandler:適合取1條記錄。把當前記錄的列名和列值放到一個Map中
//MapListHandler:適合取多條記錄。把每條記錄封裝到一個Map中,再把Map封裝到List
//ScalarHandler:適合取單行單列數(shù)據(jù)
BeanHandler:把每條記錄封裝成對象,適合取一條記錄
BeanListHandler把每條記錄封裝成對象,把對象存儲到List集合中,適合取多條記錄
接下來扣丁學堂小編針對Java在線學習之ResultSetHandler常用結(jié)果集封裝案例分析,完成針對結(jié)果集的封裝。
案例代碼
1.MySQL數(shù)據(jù)庫創(chuàng)建圖書信息表
2.創(chuàng)建Book.javajavabean類-->略
3.建立CSP0連接池-->略
4.根據(jù)需求,使用指定的結(jié)果集獲取數(shù)據(jù)結(jié)果

首先我們先介紹最常用的結(jié)果集:
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適合取一條記錄把該記錄的每一列值存儲到一個數(shù)組中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適合取多條記錄把該記錄的每一列值存儲到一個數(shù)組中Object[]然后把數(shù)組封裝到集合中
@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獲取某一列的數(shù)據(jù)封裝到List集合中
@Test
publicvoidtestQuery5()throwsSQLException{
QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
List<Object>list=qr.query("select*frombook",newColumnListHandler(2));//可以根據(jù)列號從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>>
//內(nèi)Map:key字段名value:字段值
//外Map:key指定字段的值value:內(nèi)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適合取單行單列數(shù)據(jù)
@Test
publicvoidtestQuery9()throwsSQLException{
QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
Objectobj=qr.query("selectcount(*)frombook",newScalarHandler());
System.out.println(obj);
}
}
以上代碼是針對查詢,給出的對應(yīng)操作。當然,我們實際工作中不只有查詢,還會涉及到一些增刪改以及批量處理的功能。這時候我們就要使用QueryRunner類中的另外兩個方法來完成了。他們分別是:
update()用于執(zhí)行insertupdatedelete
batch()批處理可執(zhí)行多條語句批量
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()方法是批量處理
*所需要的參數(shù)包括一個二維數(shù)組
*Object[][]params=newObject[5][];高維的數(shù)5決定是執(zhí)行sql語句的次數(shù)
*低維數(shù)組的元素就是給sql語句?賦值的
**/
@Test
publicvoidtestBatchInsert()throwsSQLException{
QueryRunnerqr=newQueryRunner(C3P0Utils.getDataSource());
//batch方法第二個參數(shù)是一個二維數(shù)組所以我們先創(chuàng)建一個二維數(shù)組
Object[][]params=newObject[5][];
//給二維數(shù)組中每一個一維數(shù)組的元素進行賦值
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);
}
}
以上就是關(guān)于扣丁學堂java在線學習之ResultSetHandler常用結(jié)果集封裝的詳細介紹,希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學堂官網(wǎng)查詢??鄱W堂是專業(yè)的Java培訓機構(gòu),不僅有專業(yè)的老師和與時俱進的課程體系,還有大量的Java視頻教程供學員掛看學習哦。扣丁學堂java技術(shù)交流群:487098661。微信號:codingbb
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。

