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);
}
}
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);
}
}
相关文章推荐
- 最长递增子序列(Longest increasing subsequence)
- HDU 1711 Number Sequence
- Fix the issues identified by lint, or add the following to your build script...
- UINavigationController 操作记录
- 关于UICollectionView的学习
- [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
- [独孤九剑]持续集成实践(二)– MSBuild语法入门
- 【UI视觉】Android material Ripple 水波 点击效果
- 实现sql 取最大的日期后再取最大的UniqueId
- hdu 1711 Number Sequence
- UVA 10099 The Tourist Guide【floyd】
- Android中UI线程与后台线程交互设计的5种方法
- UIRefreshControl用法
- easyui中combobox级联的实现
- 无需自定义UITabbar也可改变UITabbarController的背景和点击和的颜色
- VBS 自动更新SQL SEVER 2014 Query 模板
- IOS开发之关于UIButton点击没有响应问题
- Android UI线程和非UI线程
- Gradle version 1.10 is required. Current version is 2.2.1. in android
- Burp suite的安装教程