docs: public <T> T query(Connection conn, String sql, Object[] params,
              ResultSetHandler<T> rsh) throws SQLException {
  
          PreparedStatement stmt = null;
          ResultSet rs = null;
          T result = null;
  
          try {
              stmt = this.prepareStatement(conn, sql);
              this.fillStatement(stmt, params);
              rs = this.wrap(stmt.executeQuery());
              result = rsh.handle(rs);
  
          } catch (SQLException e) {
              this.rethrow(e, sql, params);
  
          } finally {
              try {
                  close(rs);
              } finally {
                  close(stmt);
              }
          }
  
          return result;
      }