¿Cómo debe tratar la implementación de Iterator con las excepciones marcadas?

Estoy envolviendo un java.sql.RecordSet dentro de un java.util.Iterator. Mi pregunta es, ¿qué debo hacer en caso de que algún método de conjunto de registros arroje una SQLException?

losjava.util.Iterator javadoc explica qué excepciones lanzar en diversas situaciones (es decir, NoSuchElementException en caso de que llame next () más allá del último elemento)

Sin embargo, no menciona qué hacer cuando hay un problema completamente no relacionado causado por, p. problemas de red o disco IO.

Simplemente lanzar SQLException en next () y hasNext () no es posible porque es incompatible con la interfaz Iterator.

Aquí está mi código actual (simplificado):

public class MyRecordIterator implements Iterator<Record>
{
    private final ResultSet rs;

    public MyRecordIterator() throws SQLException
    {
        rs = getConnection().createStatement().executeQuery(
                "SELECT * FROM table");         
    }

    @Override
    public boolean hasNext()
    {
        try
        {
            return !rs.isAfterLast();
        }
        catch (SQLException e)
        {
            // ignore, hasNext() can't throw SQLException
        }
    }

    @Override
    public Record next()
    {
        try
        {
            if (rs.isAfterLast()) throw new NoSuchElementException();
            rs.next();
            Record result = new Record (rs.getString("column 1"), rs.getString("column 2")));
            return result;
        }
        catch (SQLException e)
        {
            // ignore, next() can't throw SQLException
        }
    }

    @Override
    public void remove()
    {
        throw new UnsupportedOperationException("Iterator is read-only");
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta