У меня есть следующий предикат реализации:Predicate запрос реализация FilreredRowSet в JAVA
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
. Почему это так? Не используется ли метод .next(), возвращающий false, если следующая строка afterLast?
Я могу пройти любой набор результатов без проверки if (!crs.isAfterLast())
. Просто использовать rs.next() было бы достаточно, поскольку он возвращает false, если следующий после последнего.
Почему в предикате этого не бывает? Заранее спасибо.