DBUtils源码解析(一)--QueryRunner类update

本文深入探讨了DBUtils库中QueryRunner类的update方法,重点解析了其内部如何使用PreparedStatement执行SQL更新操作。通过源码分析,揭示了prepareStatement方法配置参数的重要性以及如何处理SQL语句参数,特别是对null值和CallableStatement的特殊处理。文章强调了源码中的错误处理和健壮性设计,尤其是对可能存在的数据库驱动不兼容问题的处理策略。
摘要由CSDN通过智能技术生成

今天开始来看看dbutils的源码,看介绍dbutils主要的两个类是QueryRunner和ResultSetHandler,看名字大概就能知道两个类的作用了,一个是负责执行sql,一个是负责处理结果。先来看QueryRunner类的实现。

一般数据库的操作就是增删改查,执行存储过程以及批量执行SQL。看QueryRunner的API就能发现,这么操作都提供了对应的执行方法。因为查询(query)会涉及到对查询结果的处理,所以先看更简单的update和insert吧。

看QueryRunner的源码会发现update同名的方法总共有7个,6个public,1个private。最终都是执行private的代码,把这个方法的代码贴出来。

private int update(Connection conn, boolean closeConn, String sql, Object... params) throws SQLException {
        if (conn == null) { throw new SQLException("Null connection");}
        if (sql == null) {
            if (closeConn) {close(conn);}
            throw new SQLException("Null SQL statement");
        }
        PreparedStatement stmt = null;
        int rows = 0;
        try {
            //预编译SQL
            stmt = this.prepareStatement(conn, sql);
            //填充
在上一篇文章,我们介绍了JDBC的PreparedStatement和ResultSet的使用。在本文,我们将介绍Apache Commons DbUtilsQueryRunnerQueryRunner是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、付费专栏及课程。

余额充值