code: public int call(String sql, List<Object> params) throws Exception {
          Connection connection = createConnection();
          CallableStatement statement = connection.prepareCall(sql);
          try {
              LOG.fine(sql + " | " + params);
              setParameters(params, statement);
              configure(statement);
              return statement.executeUpdate();
          } catch (SQLException e) {
              LOG.warning("Failed to execute: " + sql + " because: " + e.getMessage());
              throw e;
          } finally {
              closeResources(connection, statement);
          }
      }
docs: Performs a stored procedure call with the given parameters.
  <p>
  Example usage - see {@link #call(String)} for more details about
  creating a <code>HouseSwap(IN name1, IN name2)</code> stored procedure.
  Once created, it can be called like this:
  <pre>
  def rowsChanged = sql.call("{call HouseSwap(?, ?)}", ['Guillaume', 'Paul'])
  assert rowsChanged == 2
  </pre>
  <p>
  Resource handling is performed automatically where appropriate.
  
  @param sql    the SQL statement
  @param params a list of parameters
  @return the number of rows updated or 0 for SQL statements that return nothing
  @throws SQLException if a database access error occurs
  @see #call(String)