DBUtils工具类的使用

DBUtils概述:

        是Apache组织提供的一个对JDBC进行简单封装的开源工具,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能

常用的API:

        一、创建QueryRunner对象,我们使用的也是QueryRunner对象的API
        二、QueryRunner执行增删改的操作,API
            - public int update(String sql, Object... params):执行增删改的sql语句,params参数是可变参数,参数的个数取决于sql语句中的?的个数
            ps:     queryRunner.update("insert into user values(null,?,?,?)“,"张三","123456","小三");
        三、执行查询的sql语句的API
            - public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
            执行查询的操作,sql语句和后面的params可变参数要一一对应,
            ResultSetHandler<T> rsh:表示是结果集处理者,是一个接口

使用DBUtils完成增删改:

        c3p0配置文件

<c3p0-config>
    <default-config>
        <property name="DriverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mybase_1?characterEncoding=utf8</property>
        <property name="user">root</property>
        <property name="password">rootroot</property>
        <property name="initialPoolSize">5</property>
    </default-config>
</c3p0-config>
public class Tests {
    public static void main (String[] args) {
        /*
        *   分析:
        *       1、导包
        *       2、创建QueryRunner对象,实例化参数中传入DataSource
        *       3、调用update方法完成增删改
        * */

    }

    // 增
    @Test
    public void insert() throws SQLException {
        DataSource dataSource = c3p0Util.getDataSource();
        // 1.创建QueryRunner对象,传入
        QueryRunner qr = new QueryRunner(dataSource);
        // 2.调用update方法
        int i = qr.update("insert into users values(null,?,?,?)", "王七", "111111", "小七");
        System.out.println("受影响的行数: " + i);
    }

    // 删
    @Test
    public void delete() throws SQLException {
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        int i = qr.update("delete from users where id = ?", "6");
        System.out.println("受影响的行数:" + i);
    }

    // 改
    @Test
    public void update() throws SQLException {
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        int i = qr.update("update users set username = ? where id = ?", "李四", "4");
        System.out.println("受影响的行数" + i);
    }

使用DBUtils完成查询

            ResultSetHandler接口的实现类,列举几个常用的

ArrayHandler:适合查询结果是一条记录的,会把这条记录的数据封装到一个object数组中
BeanHandler:适合查询结果是一条记录的,会把这条记录的数据封装到一个javaBean中
MapHandler:适合拆线呢结果是一条记录的,会把这条记录的数据封装到一个Map集合中

ArrayListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个object数组中,然后把这些数组添加到List集合中
BeanListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个javaBean对象中,然后把这些javaBean对象添加到List集合中
MapListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个Map集合中,然后把这些Map集合添加到List集合中

KeyedHandler:适合查询的结果是条件记录的,会把每条记录的诗句封装到一个Map集合中,然后把这些Map集合添加到另一个Map集合中

ColumnListHandler:适合查询的结果是单列多条记数据,会把该列的所有数据存储到List集合中

ScalarHandler:适合查询的结果是单个值的,会把这个值封装成一个对象  
// 查询结果是一条记录的【 ArrayHandler】
    @Test
    public void select1() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        Object[] query = qr.query("select * from user where id = ?", new ArrayHandler(), 1);
        System.out.println(Arrays.toString(query));
    }

    // 查询结果是一条记录的【 BeanHandler】
    @Test
    public void select2() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        User user = qr.query("select * from users where id = ?", new BeanHandler<User>(User.class), 3);
        System.out.println(user);
    }

    // 查询结果是一条记录的【 MapHandler】
    @Test
    public void select3() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        Map<String, Object> map = qr.query("select * from users where id = ?", new MapHandler(), 3);
        System.out.println(map);
    }

    // 查询结果是多条记录的【ArrayListHandler】
    @Test
    public void select4() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        List<Object[]> list = qr.query("select * from users", new ArrayListHandler());
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }
    }

    // 查询结果是多条记录的【BeanListHandler】
    @Test
    public void select5() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        List<User> list = qr.query("select * from users", new BeanListHandler<User>(User.class));
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 查询结果是多条记录的【MapListHandler】
    @Test
    public void select6() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        List<Map<String, Object>> list = qr.query("select * from users", new MapListHandler());
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }

    // 查询结果是多条记录的【KeyedHandler】
    @Test
    public void select7() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        Map<Object, Map<String, Object>> map = qr.query("select * from users", new KeyedHandler());
        Set<Object> keys = map.keySet();
        for (Object key : keys) {
            Map<String, Object> map1 = map.get(key);
            System.out.println(key+":"+map1);
        }
    }

    // 查询结果是单列多行记录的【ColumnListHandler】
    @Test
    public void select8() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        List<Object> list = qr.query("select username from users", new ColumnListHandler());
        System.out.println(list);
    }

    // 查询结果是单列单行的记录【ScalarHandler】
    @Test
    public void select9() throws SQLException {
        // 1.创建QueryRunner对象,传入连接池
        QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
        // 2.调用query方法
        Long count = (Long)qr.query("select count(*) from users", new ScalarHandler());
        System.out.println(count);

    }

上一篇:6.数据库连接池&DBUtils


下一篇:dbUtils 中的各种 Handler 什么 意思