package jef.database.wrapper;
import java.io.Closeable;
import java.sql.SQLException;
import java.util.Iterator;
import jef.common.log.LogUtil;
import jef.database.jdbc.result.IResultSet;
/**
* 用于辅助用户遍历数据库查询结果集的遍历器
*
* 具备特性是:当遍历完成时,会自动关闭游标结果集。当最后一次调用hasNext()方法返回false时,就会去关闭。 当然,遍历未完成时,你也可以通过调用
* {@link #close()}方法,手工关闭结果集。
*
* @see #close()
* @author jiyi
*
* @param <T>
*/
public interface ResultIterator<T> extends Iterator<T>, Closeable {
public void close();
final class Impl<T> implements ResultIterator<T> {
private IResultSet rs;
private Iterator<T> iterateResultSet;
public Impl(Iterator<T> iterateResultSet, IResultSet rs) {
this.iterateResultSet = iterateResultSet;
this.rs = rs;
}
public boolean hasNext() {
boolean hasnext = iterateResultSet.hasNext();
if (!hasnext)
close();
return hasnext;
}
public T next() {
return iterateResultSet.next();
}
public void remove() {
throw new UnsupportedOperationException();
}
public void close() {
if (rs == null)
return;
try {
rs.close();
} catch (SQLException e) {
LogUtil.exception(e);
}
rs = null;
}
}
}