---恢复内容开始---
ResultSetHander接口
1.使用BeanHandler()只返回第一行结果集 ,封装到一个对应的JavaBean中 ;eg: User user=(User)bd.query(sql,new BeanHandler(User.class),1);
2.使用BeanListHandler()返回多行结果集; eg: ArrayList
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