---恢复内容开始---
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 }
三:创建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