方法Statement.getMoreResults()
存在两种变体:一种不带参数,另一种带整数参数。第二个变体接受三个常量之一CLOSE_CURRENT_RESULT
,KEEP_CURRENT_RESULT
和CLOSE_ALL_RESULTS
。我的问题是,第一个变体是否相当于传递给第二个变量的某个常量(如果是,那么哪一个?)getMoreResults()
是等同于getMoreResults(CLOSE_CURRENT_RESULT)
还是getMoreResults(CLOSE_ALL_RESULTS)
还是两个?
答案 0 :(得分:2)
JDBC是接口和所需行为的集合。 getMoreResults()
调用getMoreResults(int)
是否取决于各个JDBC实现。
但是,getMoreResults()
的API文档说:
移动到此
Statement
对象的下一个结果,如果它是true
对象,则返回ResultSet
,并隐式关闭任何当前ResultSet
个对象< / strong>使用方法getResultSet
获得。
这相当于调用getMoreResults(Statement.CLOSE_ALL_RESULTS)
。
Statement.CLOSE_ALL_RESULTS
定义为:
在调用
ResultSet
时,应该关闭表示之前保持打开的所有getMoreResults
个对象的常量。
使用any和all可能会引起一些混淆,但它们都表明任何先前打开的ResultSet
应该被关闭。
有趣的是(正如您在评论中指出的那样),如果驱动程序不支持多个打开的结果,getMoreResults(Statement.CLOSE_ALL_RESULTS)
应该抛出SQLFeatureNotSupportedException
。
apidoc和JDBC规范中描述的getMoreResults()
的行为确实表明它应该是等效的。
JDBC 4.2规范在13.1.2.3中说:
默认情况下,对方法
getMoreResult
的每次调用都会关闭之前的任何内容 方法ResultSet
返回的getResultSet
对象。
基于此,在不支持多个打开结果的驱动程序中,getMoreResults()
等同于getMoreResults(Statement.CLOSE_CURRENT_RESULT)
,并且在支持多个打开结果的驱动程序中,它等同于{{1 }}。我认为这种区别有点奇怪和不必要,因为在不支持多个打开结果的驱动程序中,关闭当前结果与关闭所有结果相同(因为只有一个结果)。我将与JDBC专家组讨论这个问题。