DBUtils工具

DBUtils工具

简介

Apache旗下的产品。是对jdbc的简单封装。提供出通用的jdbc操作方法。简化开发者使用jdbc的成本。

 

常用的API说明

|- QueryRunner类: 主要进行jdbc的增删改查操作。

|-update(): 用于更新

|-query(): 用于查询

 

|- ResultSetHandler接口: 主要用于在查询操作中,封装结果集。ResultSet -> 对象

|-ArrayHandler类:把结果集的第一行记录封装成数组

|-ArrayListHandler类: 把结果集的每一行封装到对象数组中,每个对象数组放入List集合中。

|- BeanHandler类: 把结果集封装到一个javabean对象中

|-BeanListHandler类: 把结果集的每一行数据封装到一个javabean对象中,然后把javabean对象放入List集合中。

以上两个方法使用频率最高!!!

|- ScalarHandler类:  把结果集的第一行第一列的数据返回。通用用于聚合查询(例如,countmaxminavg

 

介绍完它的核心API,下面来演示一下它的使用步骤。

 

DBUtils的使用步骤

步骤一:导包

导入commons-dbutils-1.2.jar 

 

步骤二:代码中使用它

利用DBUtils进行增删改工作

 

 

    @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进行查询工作

DBUtils最大的用处还是在于查询后把结果封装~下面来体现一下把

 

1.ArrayHandler:把查询结果的第一行返回一个对象数组。

 

    @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);
        }    
    }

 

2.ArrayListHandler:把查询的结果的每一行封装到一个数组中,然后把这些数组放到一个集合中返回。

 

@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);
        }    
    }

 

3.BeanHandler:把结果集的第一行记录返回一个javaBean对象

前提:结果集的字段名 和 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);
        }    
    }

 

4.BeanListHandler:把结果集的每一行封装成一个javaBean对象,然后把这些对象放入到一个List集合中返回。

前提:结果集的字段名 和 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);
        }    
    }

 

5.scalarHandler:返回结果集第一行第一列的字段值。 

常常被用于聚合查询

    @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);
        }    
    }

6.自定义字段名转换handler

如果字段名 和 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这个工具的一些用法,主要是用来封装结果集的对象~

 

 

 

 

posted @ 2014-12-13 22:11  白Rime  阅读(1915)  评论(0编辑  收藏  举报