Согласно documentation для getResultSet
в java.sql.Statement
, он говорит:getResultSet() «должна вызываться только один раз в результате»
Возвращает текущий результат в виде объекта ResultSet. Этот метод должен вызываться только один раз за каждый результат.
Используя некоторый тестовый код, я побежал executeQuery()
и несколько вызовов getResultSet()
и отметил, что ResultSet
вернулся указал на тот же объект. Поэтому я предполагаю, что он не возвращает другой ResultSet
, который вам нужно будет закрыть индивидуально. Но, конечно, это может быть уникальным для моих драйверов JDBC.
Глядя на documentation для ResultSet
он говорит:
по умолчанию объект ResultSet не является обновляемым и имеет курсор, который движется вперед только. Таким образом, вы можете прокручивать его только один раз и только от первой строки до последней строки.
Это, пожалуй, хорошая причина, почему это может быть нецелесообразно называть его несколько раз, поскольку это может привести к некоторой ситуации с «добычей». Если это была единственная причина, я чувствовал, что они могли просто сказать это, поэтому я думаю, что может быть больше, чем просто это.
Так кто-нибудь знает, почему нельзя звонить getResultSet
более одного раза за результат? Это question - это то, что заставило меня любопытствовать в первую очередь.
Не сообщать об этом в качестве ответа, потому что это только догадка, но я подозреваю, что таким образом можно дать некоторые возможности разработчикам драйверов JDBC, позволяя им не определять, что происходит, когда вы вызываете его более одного раза. В вашем конкретном случае это работает, но если вы когда-либо переключаете драйверы JDBC, это может и не быть. –
Я бы подумал, что это так же просто: объект ResultSet имеет состояние. В качестве члена Заявления есть только один объект ResultSet. Получение объекта не повторяет выполнение инструкции. Получение объекта во второй раз не гарантируется в том же состоянии, что и первый, если вы изменили что-то после первого получения. Так что это просто предостережение. Заглядывая в драйвер Postgres jdbc (org.postgresql.jdbc2.AbstractJdbc2Statement), мы видим, что внутри он делает много таких вызовов: return (result! = Null && result.getResultSet()! = Null); – Glenn