Requirements of getMoreResults()/getMoreResults(int)
mark at lawinegevaar.nl
Sun Nov 22 10:26:24 UTC 2015
I just ran into a question on stackoverflow,
http://stackoverflow.com/q/33853354/466862 about the requirements for
getMoreResults() vs getMoreResults(int).
The description of getMoreResults() says:
"and implicitly closes any current ResultSet object(s) obtained with the
As it uses **any** and object**(s)**, this sounds to me like its
behavior should be the equivalent of
getMoreResults(Statement.CLOSE_ALL_RESULTS), however getMoreResults(int)
"SQLFeatureNotSupportedException - if
DatabaseMetaData.supportsMultipleOpenResults returns false and either
Statement.KEEP_CURRENT_RESULT or Statement.CLOSE_ALL_RESULTS are
supplied as the argument."
This was added in JDBC 4, JDBC 3 had no such requirement.
So, what is the required behavior for getMoreResults()? Is it always
getMoreResults(Statement.CLOSE_CURRENT_RESULT), or is it
getMoreResults(Statement.CLOSE_CURRENT_RESULT) in a driver that does not
support multiple results, and
getMoreResults(Statement.CLOSE_ALL_RESULTS) in a driver that does
support multiple open results?
If the second, then I think for a driver that does not support multiple
open results this distinction is unnecessary, because then closing the
current result is the same as closing all results (as there is only one
open result); and then the requirement to throw
SQLFeatureNotSupportedException for Statement.CLOSE_ALL_RESULTS is also
On a related note, the DatabaseMetData.supportsMultipleOpenResults says:
"Retrieves whether it is possible to have multiple ResultSet objects
returned from a CallableStatement object simultaneously."
I think CallableStatement should be changed to Statement as you can call
stored procedures (or other statements) that have multiple results also
with Statement or PreparedStatement.
More information about the jdbc-spec-discuss