QueryRunner类 的應用,以及ResultSetHandler 接口的实现类

1 .该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
  ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
2.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

3.示例代碼如下:

  1.首先定義一實體類

package com.beiwo.day05.entity;

import java.io.Serializable;
import java.sql.Date;

public class Person implements Serializable{

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	private int id;

	private String name;

	private String password;

	private String email;

	private Date birthday;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", password=" + password
				+ ", email=" + email + ", birthday=" + birthday + ", getId()="
				+ getId() + ", getName()=" + getName() + ", getPassword()="
				+ getPassword() + ", getEmail()=" + getEmail()
				+ ", getBirthday()=" + getBirthday() + ", getClass()="
				+ getClass() + ", hashCode()=" + hashCode() + ", toString()="
				+ super.toString() + "]";
	}

}

測試查詢

package com.beiwo.day05.test;

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.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import com.beiwo.day05.entity.Person;
import com.beiwo.day05.util.C3P0Util;

public class TestDBUtils {

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

	public void testArrayListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person";

		List<Object[]> list = qr.query(sql, new ArrayListHandler());

		for (Object[] objects : list) {
			for (Object object : objects) {
				System.out.println(object);
			}
			System.out.println("-----------------------------");
		}
	}

	@Test //把结果集中的第一行数据转成对象数组。

	public void testArrayHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person";

		Object[] object = qr.query(sql, new ArrayHandler());
		for(Object object1 : object){
			System.out.println(object1);
		}

	}

//	@Test 将结果集中某一列的数据存放到List中。
	public void testColumnListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT name,password,email,birthday FROM person";

		List<Object> persons = qr.query(sql, new ColumnListHandler(2));
		for(Object object : persons){
			System.out.println(object);
		}

	}

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

	public void testMapHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person WHERE id=?";

		Map<String, Object> map= qr.query(sql, new MapHandler(),1);
		for (Map.Entry<String, Object> m:map.entrySet()) {
			System.out.println(m.getKey() + "\t" + m.getValue());
		}

	}

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

	public void testMapListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person ";

		List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
		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 //查询数据库中信息的总条数
	public void testScalarHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT COUNT(*) FROM person ";

	Long l = (Long)qr.query(sql, new ScalarHandler(1));
	System.out.println(l);

	}

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

	public void testBeanListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person ";

	List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
	System.out.println(list);
	}

	@Test //将结果集中的第一行数据封装到一个对应的JavaBean实例中。
	public void testBeanHandler() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "SELECT * FROM person WHERE id=?";

	Person person = qr.query(sql, new BeanHandler<Person>(Person.class),1);
	System.out.println(person);
	}
}

測試增刪改

package com.beiwo.day05.test;

import java.sql.SQLException;
import java.util.Date;

import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

import com.beiwo.day05.util.C3P0Util;

public class TestUpDate {

	@Test
	public void testInsert() throws SQLException{
		QueryRunner qRunner = new QueryRunner(C3P0Util.getDataSource());
		String sql = "INSERT INTO person(name,password,email,birthday)VALUES(?,?,?,?)";
		qRunner.update(sql, "ccc","789","[email protected]",new Date());
	}

	@Test
	public void testUpDate1() throws SQLException{
		QueryRunner qRunner = new QueryRunner(C3P0Util.getDataSource());
		String sql = "UPDATE person SET name=‘www‘ WHERE id=2";
		qRunner.update(sql);
	}

	@Test
	public void testUpDate2() throws SQLException{
		QueryRunner qRunner = new QueryRunner(C3P0Util.getDataSource());
		String sql = "DELETE FROM person WHERE id=6";
		qRunner.update(sql);
	}

}
时间: 2024-10-07 02:16:31

QueryRunner类 的應用,以及ResultSetHandler 接口的实现类的相关文章

JAVA中所有与集合有关的实现类都是这六个接口的实现类

JAVA中所有与集合有关的实现类都是这六个接口的实现类. Collection接口:集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构. List接口代表按照元素一定的相关顺序来组织(在这个序列中顺序是主要的),List接口中数据可重复. Set接口是数学中集合的概念:其元素无序,且不可重复.(正好与List对应) SortedSet会按照数字将元素排列,为"可排序集合". Map接口中每一个元素不是一个对象,而是一个键对象和值对象组成的键值对(Key-Value)

使用DbUtils实现增删改查——ResultSetHandler 接口的实现类

在上一篇文章中<使用DbUtils实现增删改查>,发现运行runner.query()这行代码时.须要自己去处理查询到的结果集,比較麻烦.这行代码的原型是: public Object query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) 当中ResultSetHandler是一个接口,实际上.万能的Apache已经为我们提供了众多好用的实现类,如今举比例如以下: public c

Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口

Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. API介绍: org.apache.commons.dbutils.QueryRunner --BDMa

Apache——DBUtils框架ResultSetHandler接口使用

参考链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选.    API介绍:         org.apache.commons.dbutils.QueryRunner --- 核心

DBUtils框架ResultSetHandler接口学习

今儿在学习spring框架的时候,让我想起来之前做项目时一直搁置的一个问题,就是DBUtils框架的做数据库操作的使用,当时制作项目的时候就是通过实例打了一遍,由于时间原因也并没有仔细去了解这一方面.所以,今天来学习下对于这方面的使用. 通过查阅资料发现QueryRunner类的基本CRUD的使用 BDUtils简介 以下是我摘下来的一些认为重要的点 QueryRunner中一共有6种方法: execute(执行SQL语句) batch(批量处理语句) insert(执行INSERT语句) in

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断

Dao接口和实现类以及Service接口和实现类代码抽取

紧接着上次无线点餐项目的文档,我们进行Dao层抽取. 6.Dao接口以及实现类代码抽取 对于BoardDao和CuisineDao的处理接口和实现类,除了定义自己的特有方法外,其他基本功能的CRUD方法都一样,只是操作的实体对象不一样.为了代码的复用,简化代码,我们可以将公共的CRUD方法提取到BaseDao中,只需要实现接口即可. 同理, 不同的实现类,实现CRUD相同的业务逻辑的时, 除了操作的实体不同,其他都是相同的, 所以我们可以把相同的业务逻辑实现,抽取出来,放到BaseSericeI

【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 上一章,我们介绍了安装和新建控制器.视图,这一章我们来创建个数据模型,并且添加接口和实现类. 添加EF上下文对象 按照我们以前的习惯,我们还是新建几个文件夹 Commons:存放帮助类 Domians:数据模型 Services:接口和实现类 我们在Domains文件夹下添加一个类库 Domain 我们新建一个类 ApplicationDbContext 继承 DbContext 1 using Microsoft.Ent

MyBatis 源码分析——SqlSession接口和Executor类

mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用.可以说SqlSession接口实例是开发过程中打交道最多的一个类.即是DefaultSqlSession类.如果笔者记得没有错的话,早期是没有什么getMapper方法的.增删改查各志有对应的方法进行操作.虽然现在改进了很多,但是也保留了很多.我们依旧可以看到类似于selectList这样子的方法.源码的例子里面就可以找到.如下 SqlSession session = sqlMapper.openSession(T