是Apache旗下的产品。是对jdbc的简单封装。提供出通用的jdbc操作方法。简化开发者使用jdbc的成本。
|- QueryRunner类: 主要进行jdbc的增删改查操作。
|-update(): 用于更新
|-query(): 用于查询
|- ResultSetHandler接口: 主要用于在查询操作中,封装结果集。ResultSet -> 对象
|-ArrayHandler类:把结果集的第一行记录封装成数组
|-ArrayListHandler类: 把结果集的每一行封装到对象数组中,每个对象数组放入List集合中。
|- BeanHandler类: 把结果集封装到一个javabean对象中
|-BeanListHandler类: 把结果集的每一行数据封装到一个javabean对象中,然后把javabean对象放入List集合中。
以上两个方法使用频率最高!!!
|- ScalarHandler类: 把结果集的第一行第一列的数据返回。通用用于聚合查询(例如,count,max,min,avg)
介绍完它的核心API,下面来演示一下它的使用步骤。
步骤一:导包
导入commons-dbutils-1.2.jar 包
步骤二:代码中使用它
@Test public void test1() { //1.创建QueryRunner //方式一:用一个DataSoutce对象作参数 ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句 qr.update("insert into students(id,name) values(?,?)",new Object[] {8,"JAX"}); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
下面来看看方式二:
@Test public void test2() { //1.创建QueryRunner //方式二:用无参的方法 ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(); Connection conn = null; try { conn = pool.getConnection(); //用指定的conn执行指定的SQL语句 qr.update(conn,"insert into students(id,name) values(85,'JinX')"); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); }finally{ if(conn!=null) { try { conn.close();//放回连接池 } catch (SQLException e) { e.printStackTrace(); } } } }
DBUtils最大的用处还是在于查询后把结果封装~下面来体现一下把
@Test public void test3() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用ArrayHandler Object[] obj = (Object[]) qr.query("select * from students",new ArrayHandler()); for(int i = 0; i<obj.length;i++) { System.out.println(obj[i]); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
@Test public void test4() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用ArrayListHandler() List<Object[]> list = (List<Object[]>)qr.query("select * from students", new ArrayListHandler()); for(Object[] obj : list) { for(int i=0;i<obj.length;i++) { System.out.println(obj[i] + "\t"); } } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
前提:结果集的字段名 和 javaBean的属性名保持一致。
@Test public void test5() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用BeanHandler Students s = (Students) qr.query("select * from students",new BeanHandler(Students.class)); System.out.println(s); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
前提:结果集的字段名 和 javaBean的属性名保持一致。
@Test public void test6() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用BeanListHandler List<Students> list = (List<Students>)qr.query("select * from students",new BeanListHandler(Students.class)); for(Students s : list) { System.out.println(s); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
常常被用于聚合查询。
@Test public void test7() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用ArrayHandler Object obj = (Object) qr.query("select count(*) from students",new ScalarHandler()); System.out.println(obj); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } }
如果字段名 和 javaBean属性名,不一致,我们就要编写自己的一个handler,来实现封装时的字段名对应,下面就来演示一下如何编写自己的handler
@Test public void test8() { //1.创建QueryRunner ComboPooledDataSource pool = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(pool); try { //执行SQL语句,使用BeanHandler Students2 s = (Students2) qr.query("select * from students",new MyStudentsHandler()); System.out.println(s); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } //手动封装结果集 class MyStudentsHandler implements ResultSetHandler { @Override public Object handle(ResultSet rs) throws SQLException { while(rs.next()) { //创建javaBean对象 Students2 s = new Students2(); s.setId(rs.getInt("sid"));// s.setName(rs.getString("sname")); return s; } return null; } }
上述就是DBUtils这个工具的一些用法,主要是用来封装结果集的对象~