This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-dbutils.git
commit 3f9a36ee48825257793f7d913f66ce49ad2d557b Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Mon Jul 31 14:49:03 2023 -0400 Method that allocates a resources should release it. Use try-with-resources --- .../org/apache/commons/dbutils/QueryRunner.java | 109 ++++++++------------- 1 file changed, 42 insertions(+), 67 deletions(-) diff --git a/src/main/java/org/apache/commons/dbutils/QueryRunner.java b/src/main/java/org/apache/commons/dbutils/QueryRunner.java index 39676eb..8e03c50 100644 --- a/src/main/java/org/apache/commons/dbutils/QueryRunner.java +++ b/src/main/java/org/apache/commons/dbutils/QueryRunner.java @@ -185,69 +185,6 @@ public class QueryRunner extends AbstractQueryRunner { } } - /** - * Invokes the stored procedure via update after checking the parameters to - * ensure nothing is null. - * @param conn The connection to use for the update call. - * @param closeConn True if the connection should be closed, false otherwise. - * @param sql The SQL statement to execute. - * @param rsh The result set handler - * @param params An array of update replacement parameters. Each row in - * this array is one set of update replacement values. - * @return List of all objects generated by the ResultSetHandler for all result sets handled. - * @throws SQLException If there are database or parameter errors. - */ - private <T> List<T> execute(final Connection conn, final boolean closeConn, final String sql, final ResultSetHandler<T> rsh, final 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"); - } - - if (rsh == null) { - if (closeConn) { - close(conn); - } - throw new SQLException("Null ResultSetHandler"); - } - - CallableStatement stmt = null; - final List<T> results = new LinkedList<>(); - - try { - stmt = this.prepareCall(conn, sql); - this.fillStatement(stmt, params); - boolean moreResultSets = stmt.execute(); - // Handle multiple result sets by passing them through the handler - // retaining the final result - while (moreResultSets) { - try (@SuppressWarnings("resource") - // assume the ResultSet wrapper properly closes - ResultSet rs = this.wrap(stmt.getResultSet())) { - results.add(rsh.handle(rs)); - moreResultSets = stmt.getMoreResults(); - } - } - this.retrieveOutParameters(stmt, params); - - } catch (final SQLException e) { - this.rethrow(e, sql, params); - - } finally { - close(stmt); - if (closeConn) { - close(conn); - } - } - - return results; - } - /** * Execute an SQL statement, including a stored procedure call, which does * not return any result sets. @@ -319,7 +256,45 @@ public class QueryRunner extends AbstractQueryRunner { * @throws SQLException if a database access error occurs */ public <T> List<T> execute(final Connection conn, final String sql, final ResultSetHandler<T> rsh, final Object... params) throws SQLException { - return this.execute(conn, false, sql, rsh, params); + if (conn == null) { + throw new SQLException("Null connection"); + } + + if (sql == null) { + throw new SQLException("Null SQL statement"); + } + + if (rsh == null) { + throw new SQLException("Null ResultSetHandler"); + } + + CallableStatement stmt = null; + final List<T> results = new LinkedList<>(); + + try { + stmt = this.prepareCall(conn, sql); + this.fillStatement(stmt, params); + boolean moreResultSets = stmt.execute(); + // Handle multiple result sets by passing them through the handler + // retaining the final result + while (moreResultSets) { + try (@SuppressWarnings("resource") + // assume the ResultSet wrapper properly closes + ResultSet rs = this.wrap(stmt.getResultSet())) { + results.add(rsh.handle(rs)); + moreResultSets = stmt.getMoreResults(); + } + } + this.retrieveOutParameters(stmt, params); + + } catch (final SQLException e) { + this.rethrow(e, sql, params); + + } finally { + close(stmt); + } + + return results; } /** @@ -372,9 +347,9 @@ public class QueryRunner extends AbstractQueryRunner { * @throws SQLException if a database access error occurs */ public <T> List<T> execute(final String sql, final ResultSetHandler<T> rsh, final Object... params) throws SQLException { - final Connection conn = this.prepareConnection(); - - return this.execute(conn, true, sql, rsh, params); + try (Connection conn = this.prepareConnection()) { + return this.execute(conn, sql, rsh, params); + } } /**