Я немного растерялся. Я должен написать реализацию javax.sql.RowSet
для конкретной цели, и я пытаюсь протестировать ее как можно лучше.
Теперь у ResultSet
есть курсор, который может находиться в обычной строке (или перед первой или после последней) или в строке вставки. moveToInsertRow()
говорит:
Когда курсор находится на строке вставки, можно вызывать только методы updater, getter и insertRow.
Ничего не сказано о том, что должно произойти тогда. next()
менее полезен, даже не указывая этот случай:
Перемещает курсор вперед (sic!) На одну строку от текущей позиции. Курсор ResultSet
изначально расположен перед первой строкой; первый вызов метода next делает первую строку текущей строкой; второй вызов делает второй ряд текущим и так далее.
Когда вызов следующего метода возвращает false
, курсор помещается после последней строки. Любой вызов метода ResultSet
, который требует текущей строки, приведет к выбрасыванию SQLException
. Если тип набора результатов равен TYPE_FORWARD_ONLY
, вендор указывает, будет ли их реализация драйвера JDBC возвращать false
или выдавать SQLException
при последующем вызове next
.
Если входной поток открыт для текущей строки, вызов метода next
неявно закроет его. ResultSet
цепочка предупреждений объекта очищается при чтении новой строки.
Возвращает:
true
, если новая текущая строка действительна; false
если строк больше нет
Выдает:
SQLException
- если возникает ошибка доступа к базе данных или этот метод вызывается для закрытого набора результатов
У меня нет опыта работы с API-интерфейсами JDBC, и поэтому я не знаю, намеренно это не указано (возможно, неопределенное поведение?) Или просто недосмотр.
В настоящее время я думаю, что я просто выбросил бы SQLException
, хотя это нигде не указано, и поэтому, возможно, UnsupportedOperationException
будет лучше (так как SQLException
сигнализирует об ошибке БД или закрыто ResultSet
- ни то, ни другое не будет дело тут).
Или я где-то пропустил немного документации?