JDBC-DBUtils工具-[课本293]-ResultSetHander接口的三种实现类的BeanHander/BeanListHander/ScalarHander...

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

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()方法

 1 package day_22;
 2 
 3 public class User {
 4     private int id;
 5     private String name,password;
 6     @Override
 7     public String toString() {
 8         return "User{" +
 9                 "id=" + id +
10                 ", name='" + name + '\'' +
11                 ", password='" + password + '\'' +
12                 '}';
13     }
14 
15     public int getId() {
16         return id;
17     }
18 
19     public void setId(int id) {
20         this.id = id;
21     }
22 
23     public String getName() {
24         return name;
25     }
26 
27     public void setName(String name) {
28         this.name = name;
29     }
30 
31     public String getPassword() {
32         return password;
33     }
34 
35     public void setPassword(String password) {
36         this.password = password;
37     }
38 }
View Code

三:创建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;
    }
}
View Code

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

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);
    }
}
View Code

五:测试结果

 

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

 

转载于:https://www.cnblogs.com/zhazhaacmer/p/10012384.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值