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

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

最新文章

  1. PowerDesigner从SqlServer数据库中导入实体模型
  2. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
  3. zf-关于注册码全部错误的解决方法
  4. ASP.NET概念
  5. [物理学与PDEs]第5章习题5 超弹性材料中客观性假设的贮能函数表达
  6. Leetcode - 517 Super Washing Machines
  7. K/3 Cloud Web API接口说明文
  8. .NET项目中使用PostSharp
  9. [Laravel] 05 - Controller
  10. 过滤特殊字符(包括过滤emoji表情)
  11. Java设计模式学习记录-抽象工厂模式
  12. Vivado与SDK的联合调试方法-使用ILA
  13. jQuery .load() 里面的代码不能执行
  14. Elasticsearch 健康状态处理
  15. 10个最受欢迎的Java类(转)
  16. you need to know those webs !
  17. nyoj 269 VF 动规
  18. Maven项目结合POI实现导入导入导入导入导入Excl表格Demo-亲测可用
  19. 15-oauth2+oidc实现Server部分
  20. pycharm直接连接mysql数据库

热门文章

  1. Python机器学习基础教程-第2章-监督学习之决策树集成
  2. jquery设置滚动条样式
  3. java端同时获取批量上传图片及其他数据
  4. php密码正则匹配
  5. SSM整合-配置文件
  6. MyBatis逆向工程生成配置 generator (生成pojo、mapper.xml、mapper.java)
  7. Django基础十一之认证系统
  8. C 语言字符串的比较
  9. C语言处理字符串
  10. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) (1208F,1208G,1208H)