我有以下谓词实现:
public boolean evaluate(RowSet rowset )
{try{
int count=0;
CachedRowSet crs = (CachedRowSet)rowset;
{
if (!crs.isAfterLast())//CRUCIAL LINE
for (int i=0;i<index.length;i++)
{
if ((crs.getObject(index[i])).toString().compareTo(high[i].toString())<=0)
{
if ((crs.getObject(index[i])).toString().compareTo(low[i].toString())>=0)
{
count++;
}
}
}
}
现在,如果我因此注释掉“关键线”:
if (!crs.isAfterLast())
我会得到一个java.sql.SQLException: Invalid cursor position
. 为什么会这样?如果下一行是 afterLast,它不会使用返回 false 的 .next() 方法吗?
我可以遍历任何结果集而无需检查if (!crs.isAfterLast())
. 仅使用 rs.next() 就足够了,因为如果下一个在最后一个之后,它会返回 false。
为什么在谓词中这不会发生?提前致谢。