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);
        }
    }
在上一篇文章中,我们介绍了JDBC中的PreparedStatement和ResultSet使用。在本文中,我们将介绍Apache Commons DbUtils库中的QueryRunnerQueryRunner是Apache Commons DbUtils库中的一个,它封装了大量的JDBC操作,简化了JDBC编程的复杂度。使用QueryRunner可以避免编写大量的JDBC代码,提高开发效率。 使用QueryRunner需要引入以下依赖: ```xml <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> ``` 接下来我们来看一下如何使用QueryRunner。 1. 建立连接 在使用QueryRunner之前,需要先建立与数据库的连接。这可以通过JDBC中的DriverManager来实现。例如: ```java Connection conn = DriverManager.getConnection(url, user, password); ``` 其中,url、user和password分别表示数据库的URL、用户名和密码。 2. 执行SQL语句 QueryRunner中提供了多个方法来执行SQL语句。其中,最常用的方法是query()和update()方法。 query()方法用于查询数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数rsh表示查询结果的处理器,第四个参数params是一个数组,表示SQL语句中的参数。 update()方法用于更新数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "UPDATE user SET name=? WHERE id=?"; Object[] params = {"张三", 1}; qr.update(conn, sql, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数params是一个数组,表示SQL语句中的参数。 3. 释放资源 在使用QueryRunner完成数据库操作后,需要释放相应的资源,包括ResultSet、Statement和Connection等。这可以通过调用DbUtils中的close()方法来实现。例如: ```java DbUtils.close(resultSet); DbUtils.close(statement); DbUtils.close(connection); ``` 4. 示例代码 下面是一个完整的示例代码,演示了如何使用QueryRunner完成数据库操作: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; public class QueryRunnerDemo { public static void main(String[] args) throws SQLException { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, user, password); // 查询数据 QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); for (User user : userList) { System.out.println(user); } // 更新数据 sql = "UPDATE user SET name=? WHERE id=?"; params = new Object[]{"张三", 1}; qr.update(conn, sql, params); conn.close(); } } ``` 以上就是QueryRunner使用方法。QueryRunner封装了大量的JDBC操作,可以避免编写大量的JDBC代码,提高开发效率。同时,使用QueryRunner也需要注意资源的释放,避免出现资源泄漏的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值