它们均是作为QueryRunner类的<T> T query(String sql, ResultSetHandler<T> rsh)方法中的参数出现。
下面展示了传入不同子类对象起到不同查询作用的代码示例。
下面是示例均实现了查询的功能,通过QueryRunner类中的<T> T query(String sql, ResultSetHandler<T> rsh)方法。当然除了进行查询操作,QueryRunner类中的int update(String sql, Object... params)方法还能够实现增删改的操作。
/*
本次案例需要的jar包如下:
c3p0-0.9.1.2.jar用来实现连接池(数据源)的jar包
commons-dbutils-1.4.jar本次功能实现的核心jar包
hamcrest-core-1.3.jar是Junit中缺失部分
junit-4.12.jar用来进行单元测试
mysql-connector-java-5.0.8-bin.jar用来连接MySQL数据库
*/import java.sql.SQLException;import java.util.List;import java.util.Map;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.ArrayHandler;import org.apache.commons.dbutils.handlers.ArrayListHandler;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.ColumnListHandler;import org.apache.commons.dbutils.handlers.KeyedHandler;import org.apache.commons.dbutils.handlers.MapHandler;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import org.junit.Test;import entity.User;//这里还需要一个实体类UserpublicclassTestResultSetHandler{@Test//ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]publicvoidtese1()throws SQLException{//获取QueryRunner对象,运用带参构造方法。传入的参数是DataSource子类对象//传入的参数实际上为new ComboPooledDataSource(),这是c3p0对DataSource的实现类
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
Object[] arr = qr.query("select * from users",newArrayHandler());for(Object o : arr){
System.out.println(o);}}@Test//ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中publicvoidtese2()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
List<Object[]> query = qr.query("select * from users",newArrayListHandler());for(Object[] os : query){for(Object o : os){
System.out.println(o);}
System.out.println("--------------");}}@Test//ColumnListHandler:取某一列的数据。封装到List中。publicvoidtese3()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
List<Object> list = qr.query("select name,password from users",newColumnListHandler(2));for(Object o : list){
System.out.println(o);}}@Test//KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。publicvoidtese4()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
Map<Object,Map<String,Object>> map = qr.query("select * from users",newKeyedHandler(2));for(Map.Entry<Object, Map<String,Object>> m : map.entrySet()){
System.out.println(m.getKey());for(Map.Entry<String, Object> mm : m.getValue().entrySet()){
System.out.println(mm.getKey()+"\t"+mm.getValue());}
System.out.println("---------------------");}}@Test//MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中publicvoidtese5()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
Map<String,Object> map = qr.query("select * from users where id=?",newMapHandler(),3);for(Map.Entry<String, Object> m : map.entrySet()){
System.out.println(m.getKey()+"\t"+m.getValue());}}@Test//MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中publicvoidtese6()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
List<Map<String,Object>> list = qr.query("select * from users",newMapListHandler());for(Map<String, Object> map : list){for(Map.Entry<String, Object> m : map.entrySet()){
System.out.println(m.getKey()+"\t"+m.getValue());}
System.out.println("---------------");}}@Test//ScalarHandler:适合取单行单列数据publicvoidtese7()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
Object o = qr.query("select count(*) from users",newScalarHandler(1));
System.out.println(o);}@Test//BeanHandler:将取出来的数据封装到User对象中,只取一条记录publicvoidtese8()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
User user = qr.query("select * from users where id=?",newBeanHandler<User>(User.class),2);
System.out.println(user);}@Test//BeanListHandler:将取出来的数据封装到User对象List中,可以取多条记录publicvoidtese9()throws SQLException{
QueryRunner qr =newQueryRunner(C3P0Util.getDataSource());
List<User> list = qr.query("select * from users",newBeanListHandler<User>(User.class));for(User u : list){
System.out.println(u);}}}