Java 学习笔记 四 -- DBUtils的使用

一、安装 DBUtils数据库工具 和 Junit单元测试工具

安装jar包,直接BuildPath。

对于Junit的使用:在单元方法上方增加语句 @Test,测试时选中方法名后,右键菜单 Run as 即可。

二、DBUtils 的 QueryRunner

  DBUtil 为上篇学习笔记中所创的工具类,DBUtils是开源数据库工具包

  (一)外部创建连接对象

public class DBUtilsDemo01 {

    @Test
    public void test01() throws SQLException {
        // 1.创建执行sql的对象
        QueryRunner runner = new QueryRunner();
        String sql = "insert into t_user(username,password,realname) values('rose','123456','鲁斯')";
        // 2.外部创建连接
        Connection conn = DBUtil.getConnection();
        runner.update(conn, sql);
        conn.close();
    }

    @Test
    public void test02() throws SQLException {
        // 1.创建执行sql的对象
        QueryRunner runner = new QueryRunner();
        String sql = "insert into t_user(username,password,realname) values(?,?,?)";
        // 2.外部创建连接
        Connection conn = DBUtil.getConnection();
        // 3.设置查询参数并运行
        runner.update(conn, sql, "rose", "123456", "鲁西");
        conn.close();
    }

    @Test
    public void test03() {
        Connection conn = null;
        try {
            // 1.创建执行sql的对象
            QueryRunner runner = new QueryRunner();
            String sql = "update t_user set realname=? where id=?";
            conn = DBUtil.getConnection();
            // 2.手动管理事务
            conn.setAutoCommit(false);
            runner.update(conn, sql, "朱丽叶2", 3);
            //int i = 100/0;
            DBUtil.commit(conn);
        } catch (SQLException e) {
            DBUtil.rollback(conn);
            e.printStackTrace();
        } finally {
            DBUtil.close(conn);
        }
    }
}

  (二)连接池构造 QueryRunner ,返回ArrayHandler

public class DBUtilsDemo02 {
    @Test
    public void test01() throws SQLException {
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        Object[] arr = 
                runner.query("select * from t_user where id=1", new ArrayHandler());
        for(Object obj : arr) {
            System.out.print(obj + "	");
        }
    }
    
    @Test
    public void test02() throws SQLException {
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        List<Object[]> list = 
                runner.query("select * from t_user", new ArrayListHandler());
        for(Object[] arr : list) {
            for(Object obj : arr) {
                System.out.print(obj + "	");
            }
            System.out.println();
        }
    }

    @Test
    public void test03() throws SQLException {
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        // runner.update("update t_user set username='role' where id=3");
        // runner.update("update t_user set username=? where id=?","rose",3);
        // runner.update("delete from t_user where id=?", 3);
        String sql = "insert into t_user(username,password,realname) values(?,?,?)";
        runner.update(sql, "rose", "123456", "鲁西");
    }
}

  (三)返回 BeanHandler

其中 Emp 类必须是标准类(对象有get和set方法等)

public class DBUtilsDemo03 {
    @Test
    public void test02() throws SQLException {
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        Emp emp = 
                //runner.query("select * from emp where empno=7499", new BeanHandler<>(Emp.class));
                runner.query("select * from emp where empno=?", new BeanHandler<>(Emp.class),7499);
        System.out.println(emp.toString());
    }
    @Test
    public void test03() throws SQLException {
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        List<Emp> list = 
                runner.query("select * from emp", new BeanListHandler<>(Emp.class));
        for(Emp emp : list) {
            System.out.println(emp);
        }
    }
}

三、ResultSetHandler 接口

ResultSetHandler 接口可以将sql查询的结果映射到不同的数据类型上,该接口有下面几个常用的实现类:

类名称功能描述
ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组再封装到List集合中
BeanHandler<T> 将结果集中第一条记录封装到一个指定的java对象中
BeanListHandler<T> 将结果集中每一条记录封装到指定的java对象中,将这些对象再封装到List集合中
ColumnListHandler<T> 将结果集中指定的列的字段值,封装到一个List集合中
ScalarHandler<T> 它是用于单数据。例如select count(*) from 表操作
MapHandler 将结果集第一行封装到Map集合中,key 列名, value 该列数据
MapListHandler 将结果集封装到Map集合中,key 列名, value 该列数据, Map集合存储到List集合
原文地址:https://www.cnblogs.com/AardWolf/p/10949669.html