【发布时间】:2011-01-21 18:19:56
【问题描述】:
我将 java.sql.RecordSet 包装在 java.util.Iterator 中。我的问题是,如果任何记录集方法抛出 SQLException,我该怎么办?
java.util.Iterator javadoc 解释了在各种情况下要抛出哪些异常(即 NoSuchElementException 以防您在最后一个元素之外调用 next())
但是,它没有提到当出现完全不相关的问题时该怎么做,例如网络或磁盘 IO 问题。
简单地在 next() 和 hasNext() 中抛出 SQLException 是不可能的,因为它与 Iterator 接口不兼容。
这是我当前的代码(简化):
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");
}
}
【问题讨论】:
标签: java exception-handling iterator recordset