code: public void eachRow(String sql, @ClosureParams(value=SimpleType.class, options="java.sql.ResultSetMetaData") Closure metaClosure,
                          @ClosureParams(value=SimpleType.class, options="groovy.sql.GroovyResultSet") Closure rowClosure) throws SQLException {
          eachRow(sql, metaClosure, 0, 0, rowClosure);
      }
docs: Performs the given SQL query calling the given <code>rowClosure</code> with each row of the
  result set.
  The row will be a <code>GroovyResultSet</code> which is a <code>ResultSet</code>
  that supports accessing the fields using property style notation and ordinal index values.
  In addition, the <code>metaClosure</code> will be called once passing in the
  <code>ResultSetMetaData</code> as argument.
  <p>
  Example usage:
  <pre>
  def printColNames = { meta {@code ->}
  (1..meta.columnCount).each {
  print meta.getColumnLabel(it).padRight(20)
  }
  println()
  }
  def printRow = { row {@code ->}
  row.toRowResult().values().each{ print it.toString().padRight(20) }
  println()
  }
  sql.eachRow("select * from PERSON", printColNames, printRow)
  </pre>
  <p>
  Resource handling is performed automatically where appropriate.
  
  @param sql         the sql statement
  @param metaClosure called for meta data (only once after sql execution)
  @param rowClosure  called for each row with a GroovyResultSet
  @throws SQLException if a database access error occurs