code: public static <T> ExceptionalStream<T, SQLException> rows(final ResultSet resultSet, final Try.Function<ResultSet, T, SQLException> recordGetter) {
          N.checkArgNotNull(resultSet, "resultSet");
          N.checkArgNotNull(recordGetter, "recordGetter");
  
          final ExceptionalIterator<T, SQLException> iter = new ExceptionalIterator<T, SQLException>() {
              private boolean hasNext;
  
              @Override
              public boolean hasNext() throws SQLException {
                  if (hasNext == false) {
                      hasNext = resultSet.next();
                  }
  
                  return hasNext;
              }
  
              @Override
              public T next() throws SQLException {
                  if (hasNext() == false) {
                      throw new NoSuchElementException();
                  }
  
                  hasNext = false;
  
                  return recordGetter.apply(resultSet);
              }
  
              @Override
              public void skip(long n) throws SQLException {
                  N.checkArgNotNegative(n, "n");
  
                  final long m = hasNext ? n - 1 : n;
  
                  JdbcUtil.skip(resultSet, m);
  
                  hasNext = false;
              }
          };
  
          return newStream(iter);
      }
docs: It's user's responsibility to close the input <code>resultSet</code> after the stream is finished.
  
  @param resultSet
  @param recordGetter
  @return