您的位置:首页 > 产品设计 > UI/UE

QueryRuner类的使用

2015-08-12 16:53 417 查看
QueryRunner类的主要方法

public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。

public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。

public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。

public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。

public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

ResultSetHandler接口

该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。

ResultSetHandler 接口的实现类

ArrayHandler:把结果集中的第一行数据转成对象数组。

ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

ColumnListHandler:将结果集中某一列的数据存放到List中。

KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

package com.dsp.dbutil;

import java.sql.SQLException;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

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.ColumnListHandler;

import org.apache.commons.dbutils.handlers.KeyedHandler;

import org.apache.commons.dbutils.handlers.MapListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import org.junit.Test;

import com.dsp.util.DBCPUtil;

public class ResultSetHandlerDemo {

private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());

/**

* ArrayHandler:适合结果只有一条的情况。把记录中的每个字段的值封装到了一个Object[]中。

*

* @throws SQLException

*/

@Test

public void test1() throws SQLException {

Object[] objs = qr.query("select * from person", new ArrayHandler());

for (int i = 0; i < objs.length; i++) {

System.out.println(objs[i]);

}

}

/**

* ArrayListHandler:多条结果。把每条记录的列值封装到Object[],再把Object[]封装到List中

* ------------------- 1 aa0 2015-08-11 ------------------- 2 aa1 2015-08-11

* -------------------

*

* @throws SQLException

*/

@Test

public void test2() throws SQLException {

List<Object[]> list = qr.query("select * from person",

new ArrayListHandler());

for (Object[] objs : list) {

System.out.println("-------------------");

for (Object object : objs) {

System.out.println(object);

}

}

}

// ColumnListHandler:封装某列的值。把取出的列值封装到List中。 默认是第一列的加入到一个list ,也可以加入列名

@Test

public void test3() throws SQLException {

List<Object> list = qr.query("select * from person",

new ColumnListHandler("birthday"));

for (Object objs : list) {

System.out.println("-------------------");

System.out.println(objs);

}

}

// KeyedHandler:适合有多条记录的情况

@Test

public void test4() throws SQLException {

Map<Object, Map<String, Object>> bmap = qr.query(

"select * from person", new KeyedHandler("id"));

for (Map.Entry<Object, Map<String, Object>> bme : bmap.entrySet()) {

System.out.println("------------");

for (Entry<String, Object> lme : bme.getValue().entrySet()) {

System.out.println(lme.getKey() + ":" + lme.getValue());

}

}

}

// MapListHandler:把每行的key value 列加入到list

@Test

public void test5() throws SQLException {

List<Map<String, Object>> list=qr.query("select * from person", new MapListHandler());

for (Map<String, Object> map : list) {

System.out.println("----------");

for (Map.Entry<String, Object> me : map.entrySet()) {

System.out.println(me.getKey()+":"+me.getValue());

}

}

}

//查询第一个值

@Test

public void test7() throws SQLException{

Object obj = qr.query("select count(*) from person", new ScalarHandler(1));

System.out.println(obj.getClass().getName());

System.out.println(obj);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: