1 package cn.itcast.dbutil; 2 3 import java.sql.SQLException; 4 import java.util.List; 5 import java.util.Map; 6 7 import org.apache.commons.dbutils.QueryRunner; 8 import org.apache.commons.dbutils.handlers.ArrayHandler; 9 import org.apache.commons.dbutils.handlers.ArrayListHandler; 10 import org.apache.commons.dbutils.handlers.BeanHandler; 11 import org.apache.commons.dbutils.handlers.BeanListHandler; 12 import org.apache.commons.dbutils.handlers.ColumnListHandler; 13 import org.apache.commons.dbutils.handlers.KeyedHandler; 14 import org.apache.commons.dbutils.handlers.MapHandler; 15 import org.apache.commons.dbutils.handlers.MapListHandler; 16 import org.apache.commons.dbutils.handlers.ScalarHandler; 17 import org.junit.Test; 18 19 import cn.itcast.domain.Account; 20 import cn.itcast.util.DBCPUtil; 21 22 //查询练习 23 public class DbUtilDemo2 { 24 private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource()); 25 @Test//BeanHandler 26 public void test1() throws SQLException{ 27 Account a = qr.query("select * from account where id=?", new BeanHandler<Account>(Account.class), 1); 28 System.out.println(a); 29 } 30 @Test//BeanListHandler 31 public void test2() throws SQLException{ 32 List<Account> list = qr.query("select * from account", new BeanListHandler<Account>(Account.class)); 33 for(Account a:list) 34 System.out.println(a); 35 } 36 37 @Test//ArrayHandler:把结果集中的第一行数据转成对象数组。只适合结果集有一条记录的情况 38 public void test3() throws SQLException{ 39 //该数组中每个元素就是记录的每列的值 40 Object objs[] = qr.query("select * from account where id=?", new ArrayHandler(),1); 41 for(Object o:objs) 42 System.out.println(o); 43 } 44 @Test//ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。 45 public void test4() throws SQLException{ 46 //该数组中每个元素就是记录的每列的值 47 List<Object[]> list = qr.query("select * from account", new ArrayListHandler()); 48 for(Object[] objs:list){ 49 System.out.println("-----------------"); 50 for(Object o:objs) 51 System.out.println(o); 52 } 53 } 54 @Test//ColumnListHandler:将结果集中某一列的数据存放到List中 55 public void test5() throws SQLException{ 56 List<Object> list = qr.query("select * from account", new ColumnListHandler("id")); 57 for(Object o:list) 58 System.out.println(o); 59 } 60 @Test//KeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key。 61 public void test6() throws SQLException{ 62 Map<Object, Map<String,Object>> bmap= qr.query("select * from account", new KeyedHandler("id")); 63 for(Map.Entry<Object, Map<String,Object>> bme:bmap.entrySet()){ 64 System.out.println("-----------------"); 65 Map<String,Object> lmap = bme.getValue(); 66 for(Map.Entry<String,Object> lme:lmap.entrySet()){ 67 System.out.println(lme.getKey()+"="+lme.getValue()); 68 } 69 } 70 } 71 @Test//MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。 72 public void test7() throws SQLException{ 73 Map<String,Object> map= qr.query("select * from account where id=?", new MapHandler(),1); 74 for(Map.Entry<String, Object> me:map.entrySet()){ 75 System.out.println(me.getKey()+"="+me.getValue()); 76 } 77 } 78 @Test//MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List 79 public void test8() throws SQLException{ 80 List<Map<String,Object>> list= qr.query("select * from account", new MapListHandler()); 81 for(Map<String,Object> map:list){ 82 System.out.println("-----------------"); 83 for(Map.Entry<String, Object> me:map.entrySet()){ 84 System.out.println(me.getKey()+"="+me.getValue()); 85 } 86 } 87 } 88 @Test//ScalarHandler 适合取一条一列的记录。比如记录总数 89 public void test9() throws SQLException{ 90 Object obj = qr.query("select count(*) from account", new ScalarHandler(1)); 91 System.out.println(obj.getClass().getName()); 92 int num = ((Long)obj).intValue(); 93 System.out.println(num); 94 } 95 }