---恢复内容开始---

ResultSetHander接口

1.使用BeanHandler()只返回第一行结果集 ,封装到一个对应的JavaBean中 ;eg: User user=(User)bd.query(sql,new BeanHandler(User.class),1);

2.使用BeanListHandler()返回多行结果集; eg:   ArrayList<User> list=(ArrayList<User>) bd.query(sql, new BeanListHandler(User.class));

3.使用ScalarHandler()单行结果集的某个指定字段 (斯给lai) ; eg:  Object rt2=(Object) bd.query(sql, new ScalarHandler( columnName :"name"),3);


一:添加测试数据库

Create Table

CREATE TABLE `user` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

添加数据如下图:

  id name password
  ------ ------ ----------
  1 张三 123456
  2 李四 123456
  3 王五 123456

二:添加JavaBean类和toString()方法

 package day_22;

 public class User {
private int id;
private String name,password;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
} 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;
}
}

三:创建BaseDao类, 在该类中编写一个通用的查询方法query()

package day_22;

import day_19.JDBCTools;
import org.apache.commons.dbutils.ResultSetHandler; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class BaseDao {
//优化查询
public static Object query(String sql, ResultSetHandler<?> rsh,
Object... params)throws SQLException {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//获得连接,预编译sql,将参数设置进去
conn=JDBCTools.getConnection();
pstmt=conn.prepareStatement(sql);
for(int i=0;params!=null&&i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
//发送sql ,返回执行完成的结果集
rs=pstmt.executeQuery();
//让调用者去实现对结果集的处理
Object obj=rsh.handle(rs);
return obj;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(rs, pstmt,conn );
}
return rs;
}
}

四: 编写上述三个实现类的测试方法

package day_22;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.SQLException;
import java.util.ArrayList;
/** ArrayList<User> list ,列表中获取第几个元素,使用get()方法,下标从1->n-1!
*/
public class ResultSetTest1 {
public static void main(String[] args) throws SQLException {
//使用BeanHandler()单行结果集
BaseDao bd=new BaseDao();
String sql="select * from user where id=?";
User user=(User)bd.query(sql,new BeanHandler(User.class),1);
System.out.println("\nid为1 的User对象的name值为: "+user.toString());
//使用BeanListHandler()多行结果集
sql="select * from user";
ArrayList<User> list=(ArrayList<User>) bd.query(sql, new BeanListHandler(User.class));
for(int i=0;i<list.size();i++){
System.out.println("\n第"+(i+1)+"行: "+list.get(i).toString());
}
//使用ScalarHandler()单行结果集的某个指定字段 (斯给lai)
sql="select * from user where id=?"; Object rt2=(Object) bd.query(sql, new ScalarHandler("name"),3);
System.out.println("\n"+rt2);
Object rt3=(Object) bd.query(sql, new ScalarHandler("password"),3);
System.out.println("\n"+rt3);
}
}

五:测试结果

com.mysql.jdbc.JDBC4Connection@3eb07fd3
id为1 的User对象的name值为: User{id=1, name='张三', password='123456'} ------------------ com.mysql.jdbc.JDBC4Connection@1698c449
第1行: User{id=1, name='张三', password='123456'} 第2行: User{id=2, name='李四', password='123456'} 第3行: User{id=3, name='王五', password='123456'} ------------------------ com.mysql.jdbc.JDBC4Connection@5a2e4553
王五
com.mysql.jdbc.JDBC4Connection@45283ce2
123456 Process finished with exit code 0

JDBC-DBUtils工具-[课本293]-ResultSetHander接口的三种实现类的BeanHander/BeanListHander/ScalarHander的更多相关文章

  1. C#接口的三种实现方式

    转自原文C#接口的三种实现方式 public interface MyInterface { /// 下面三个方法的签名都是 /// .method public hidebysig newslot ...

  2. JavaScript实现接口的三种经典方式

    /* 接口:提供一种说明一个对象应该有哪些方法的手段 js中有三种方式实现接口: 1 注释描述接口 2 属性检测接口 3 鸭式辨型接口 */ /* 1 注释描述接口: 不推荐 优点: 利用注解,给出参 ...

  3. Hibernate学习笔记2.5(Hibernate核心开发接口和三种状态)

    1.configuration(配置信息管理,产生sessionfactory) sessionfactory管理一系列的连接池 opensession 永远打开新的,需要手动close getcur ...

  4. 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)

    转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...

  5. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  6. Java学习之DBUtils工具的学习

    简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ...

  7. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  8. 模拟实现 DBUtils 工具 , 技术原理浅析

    申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...

  9. DBUtils工具

    DBUtils工具 简介 是Apache旗下的产品.是对jdbc的简单封装.提供出通用的jdbc操作方法.简化开发者使用jdbc的成本. 常用的API说明 |- QueryRunner类: 主要进行j ...

随机推荐

  1. Asp.Net Core 调用第三方Open API查询物流数据

    在我们的业务中不可避免要与第三方的系统进行交互,调用他们提供的API来获取相应的数据,那么对于这样的情况该怎样进行处理呢?下面就结合自己对接跨越速运接口来获取一个发运单完整的物流信息为例来说明如何在A ...

  2. win10安装Ubuntu,用Xshell连接

    一.安装Ubuntu 安装Ubuntu,安装过程就不详细说了,我是从微软商店下载的Ubuntu安装,没有用VMware,想用Xshell连接Ubuntu,中间一直出问题,现在解决,总结一下. 二.配置 ...

  3. python离线安装外部库(第三方库)

    在官网下好外部库,解压后,点击解压后的文件夹,按住shift 右击在命令行中执行 输入 python setup.py install

  4. VMware虚拟机(Ubuntu)通过主机代理实现——浏览器+终端访问外网

    环境说明:主机win10 + 虚拟机ubunut16.04 + 主机s-h-a-d-o-w-socks win10 主机相关操作配置1: 按下 Win + R 快捷键,输入 cmd ,然后在命令行中输 ...

  5. mysql优化limit

    limit 1.当只需要一条数据的时候,用limit1: 2.当需要提高分页效率的时候: 如果用上面的语句分页少量数据还是可以用的,但是随着数据量越来越大,直接用limit语句查询速度就会越来越慢,降 ...

  6. Linux 服务器修改时间与时间同步

    设置时间 date --set '2015-11-23 0:10:40' # 方法一,通用 timedatectl set-time '2015-11-23 08:10:40' # 容器内可能不支持 ...

  7. typeAliasesPackage 属性的作用

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  8. Gitlab Runner实现CI/CD自动化部署asp.net core应用

    环境说明 一台git服务器(192.168.169.7),安装gitlab,docker. 一台web服务器(192.168.169.6),安装git,gitlab runner,docker,dot ...

  9. django.http.response中HttpResponse 子类

    HttpResponse的子类 Django包含许多处理不同类型的HTTP请求的 HttpResponse 子类.像 HttpResponse 一样,这些类在 django.http 中. HttpR ...

  10. React/虚拟DOM

    在说虚拟DOM之前,先来一个引子,从输入url到展现出整个页面都有哪些过程? 1.输入网址 2.DNS解析 3.建立tcp连接 4.客户端发送HTPP请求 5.服务器处理请求 6.服务器响应请求 7. ...