Я немного в растерянности. Я должен написать реализацию 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
— если возникает ошибка доступа к базе данных или этот метод вызывается для закрытого набора результатов.
У меня нет предыдущего опыта работы с JDBC API, и поэтому я понятия не имею, намеренно ли это не указано (может быть, неопределенное поведение?) Или просто недосмотр.
В настоящее время я думаю, что просто выдал бы SQLException
, даже если это нигде не указано, и поэтому, возможно, UnsupportedOperationException
было бы лучше (поскольку SQLException
сигнализирует об ошибке БД или закрытом ResultSet
- ни то, ни другое здесь не имеет место).
Или я просто где-то пропустил часть документации?
InputStream
, переданный с помощью одного из методовupdate*Stream
, который все еще может быть открыт. 2.absolute(-1)
сейчас звучит странно, и у меня нет под рукой документов, но я думаю, что это должно быть ошибкой, поскольку нет строки «минус первая». 3. Цепочка предупреждений собирает предупреждения, с которыми сталкивается база данных при вызове различных методов. В моей реализации он не использовался (поскольку CSV-файл не будет создавать предупреждений), поэтому мне было все равно. В конце концов вы сможете понять это, но более 200 методовRowSet
не облегчают эту задачу. - person Joey   schedule 21.02.2011