DBUtils
DBUtils是Apache的工具,是一个对jdbc的简单封装的工具。提供了一些通用的jdbc操作方法。
使用步骤:
1)导入jar包
commons-dbutils-1.2.jar
2)使用的API
QueryRunner类: 通过此类可以执行更新操作或者查询操作。
update(.....): 用于更新操作(DDL、DML)
query(.....): 用于查询操作(DQL)
ResultSetHandler接口:用于封装查询之后的结果。
Object handle(ResultSet rs) : 用于封装数据
常用的实现类:
ArrayHandler: 把结果集的第一行的数据封装成对象数组。
ArrayListHandler:把结果集的每一行数据封装对象数组,把这个对象数组放入List中
BeanHandler: 把结果集的第一行数据封装成javabean
BeanListHandler: 把结果集的每一行数据封装成javabean,把这个javabean放入List中
ScalarHandler: 把结果集的第一行第一列取出。通常用于聚合函数查询。例如(count()/max())
如果表的字段名称和javabean的属性名称不一致时,需要自定义ResultSetHandler的实现类
/**
* dbutils执行查询操作
* @author chenzuyi
*
*/
public class Demo2 {
/**
* ArrayHandler: 把结果集的第一行的数据封装成对象数组。
*/
@Test
public void test1() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
//2.执行sql
Object[] arr = (Object[])qr.query("select * from student where id=?", new ArrayHandler(),new Object[]{2});
for(Object obj:arr){
System.out.println(obj);
}
}
/**
* ArrayListHandler: 把结果集的每一行数据封装对象数组,把这个对象数组放入List中
* @throws Exception
*/
@Test
public void test2() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
//2.执行sql
List<Object[]> list = (List<Object[]>)qr.query("select * from student", new ArrayListHandler());
for(Object[] arr:list){//一行
//一列
for(Object obj:arr){
System.out.print(obj+"\t");
}
System.out.println();
}
}
/**
* BeanHandler: 把结果集的第一行数据封装成javabean
* 约定前提: 表的字段名称和javabean的属性名称保持一致!!
*/
@Test
public void test3() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
//2.执行sql
Student student = (Student)qr.query("select * from student", new BeanHandler(Student.class));
System.out.println(student);
}
/**
* BeanListHandler: 把结果集的每一行数据封装成javabean,把这个javabean放入LIst中
* 约定前提: 表的字段名称和javabean的属性名称保持一致!!
*/
@Test
public void test4() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
//2.执行sql
List<Student> list = (List<Student>)qr.query("select * from student", new BeanListHandler(Student.class));
for (Student student : list) {
System.out.println(student);
}
}
/**
* ScalarHandler: 把结果集的第一行第一列取出。通常用于聚合函数查询。例如(count()/max())
*/
@Test
public void test5() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
//2.执行sql
Long count = (Long)qr.query("select count(id) from student", new ScalarHandler(1));
System.out.println("行数: "+count);
}
/**
* 如果表的字段名称和javabean的属性名称不一致时,需要自定义ResultSetHandler的实现类
*/
@Test
public void test6() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(ds);
List<Student> list = (List<Student>)qr.query("select * from student2", new MyStudentHandler());
for (Student student : list) {
System.out.println(student);
}
}
}
/**
* 自定义ResultSetHandler
*/
class MyStudentHandler implements ResultSetHandler{
@Override
public Object handle(ResultSet rs) throws SQLException {
List<Student> list = new ArrayList<Student>();
while(rs.next()){
Student s = new Student();
s.setId(rs.getInt("sid"));
s.setName(rs.getString("sname"));
s.setAge(rs.getInt("sage"));
s.setAddress(rs.getString("saddress"));
list.add(s);
}
return list;
}
}