JDBC--DButils类QueryRunner的使用

9 篇文章 0 订阅
6 篇文章 0 订阅

1、简介

  1. 官网包链接:https://commons.apache.org/proper/commonsdbutils/download_dbutils.cgi
  2. 根据官网的介绍,DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关。
  3. 官网上的简介也称之为 JDBC helper library ,由此可知,DbUtils是一个工具类库,用来进行数据库通信的。
  4. QueryRunner 中一共有6种方法:
execute(执行SQL语句)
batch(批量处理语句)
insert(执行INSERT语句)
insertBatch(批量处理INSERT语句)
query(SQL中 SELECT 语句)
update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
  1. 其中ResultSetHandler接口执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。常用实现类如下:
    • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
    • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
    • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
    • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
    • ScalarHandler:将结果集第一行的某一列放到某个对象中。(处理MySQL中的聚合函数)

具体操作:

2、导包

在这里插入图片描述

在这里插入图片描述

2、创建测试类

2.1 增删改数据,使用update()
 @Test
    public void testInsert(){
        //创建对象
        QueryRunner runner = new QueryRunner();
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "insert into user values(?,?,?)";
            runner.update(conn,sql,2,"gsl",22);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,null);
        }
    }
2.2 查询一个对象,使用query()方法,需要通过BeanHandler创建对象
@Test
    public void testQuery01(){
        QueryRunner runner = new QueryRunner();
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "select id,name,age from user where id = ?";
            //BeanHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条对象
            BeanHandler<User> user  = new BeanHandler<User>(User.class);
            User user1 = runner.query(conn,sql,user,2);
            System.out.println(user1);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,null);
        }
    }
2.3 查询多条记录,使用query()方法,需要通过BeanListHandler创建对象
@Test
    public void testQuery02(){
        QueryRunner runner = new QueryRunner();
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "select id,name,age from user where id <= ?";
            //BeanListHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于多条记录
            BeanListHandler<User> user  = new BeanListHandler<>(User.class);
            List<User> users = runner.query(conn,sql,user,10);
           // User user1 = runner.query(conn,sql,user,2);
            System.out.println(users);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,null);
        }
    }
2.4 查询数据库对象,并返回Map类型的数据
   /*
    将字段及响应字段的值作为map中的key value格式
     */
    @Test
    public void testQuery03(){
        QueryRunner runner = new QueryRunner();
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "select id,name,age from user where id = ?";
            //MapHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条记录(键值对) 返回map类型
            MapHandler user = new MapHandler();
            Map<String, Object> map = runner.query(conn, sql, user, 2);
            System.out.println(map);
            System.out.println(map.get("id"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,null);
        }
    }
2.5 特殊值操作,返回最大值,数据总数等
 @Test
    public void testQuery05(){
        QueryRunner runner = new QueryRunner();
        Connection conn = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "select max(age) from user";
            //SHandler: 是ResultSetHandler接口的实现类,用于封装表中的记录。 对应于一条记录(键值对) 返回map类型
            ScalarHandler handler = new ScalarHandler<>();
            int count  = (int) runner.query(conn, sql, handler);
            System.out.println(count);
            // System.out.println(map.get("id"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,null);
        }
    }
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值