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

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. Flutter 路由传入中文参数报错无法push问题

    flutter自带路由传递参数和使用第三方库fluro路由传递参数都可以通过一下方式解决问题 String jsonString = json.encode(mapValue); var jsons ...

  2. 老司机带大家领略MySQL中的乐观锁和悲观锁

    原文地址:https://cloud.tencent.com/developer/news/227982 为什么需要锁 在并发环境下,如果多个客户端访问同一条数据,此时就会产生数据不一致的问题,如何解 ...

  3. Redis与memached的区别

    Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...

  4. PS命令和kill命令

    名称:ps使用权限:所有使用者使用方式:ps [options] [--help]说明:显示瞬间行程 (process) 的动态参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A   ...

  5. .net core中关于System.Text.Json的使用

    在.Net Framework的时候序列化经常使用Newtonsoft.Json插件来使用,而在.Net Core中自带了System.Text.Json,号称性能更好,今天抽空就来捣鼓一下. 使用起 ...

  6. picard报错

    /home/yueyao/bio/anaconda2/bin/java -jar /home/yueyao/bio/anaconda2/share/picard-2.14.1-0/picard.jar ...

  7. LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)

    172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...

  8. Node.js安装windows环境

    一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下载对应你系统的Node.js版本:https:// ...

  9. Mac中设置Sublime快速在终端中使用命令打开项目

    工作中用Atom比较多,比较喜欢Atom可以直接在终端中直接输入atom .就能直接打开项目的功能,于是搜索得知sublime text也有这样的功能,下面就简单的配置了一下: sudo ln -s ...

  10. CTeX error saving the project file

    「Options -> ConfigurationWizard -> User Profiles > 点击 Create/Update User Profile 按钮」 重启WinE ...