Jdbc 这两种形式的语句.getMoreResults()之间的关系是什么?

Jdbc 这两种形式的语句.getMoreResults()之间的关系是什么?,jdbc,Jdbc,方法语句.getMoreResults()有两种变体:一种不接受参数,另一种接受整数参数。第二个变量接受三个常量之一CLOSE\u CURRENT\u RESULT,KEEP\u CURRENT\u RESULT,以及CLOSE\u ALL\u RESULTS。我的问题是,第一个变量是否相当于传递给第二个变量的某个常量(如果是,是哪一个?)是getMoreResults()相当于getMoreResults(CLOSE\u CURRENT\u RESULT)或getMoreResults(CLO

方法
语句.getMoreResults()
有两种变体:一种不接受参数,另一种接受整数参数。第二个变量接受三个常量之一
CLOSE\u CURRENT\u RESULT
KEEP\u CURRENT\u RESULT
,以及
CLOSE\u ALL\u RESULTS
。我的问题是,第一个变量是否相当于传递给第二个变量的某个常量(如果是,是哪一个?)是
getMoreResults()
相当于
getMoreResults(CLOSE\u CURRENT\u RESULT)
getMoreResults(CLOSE\u ALL\u RESULTS)
还是两者都不是?

JDBC是接口和所需行为的集合。是否调用
getmoresults()
call
getmoresults(int)
取决于各个JDBC实现

然而,美国石油学会的API文件指出:

移动到此
语句
对象的下一个结果,如果它是
ResultSet
对象,则返回
true
,并隐式关闭使用方法
getResultSet
获得的任何当前
ResultSet对象

这相当于调用
getMoreResults(Statement.CLOSE\u ALL\u RESULTS)

定义如下:

该常量指示调用
getMoreResults
时应关闭以前保持打开状态的所有
ResultSet
对象

使用any和all可能会引起一些混淆,但它们都表明以前打开的任何
ResultSet
都应该关闭

有趣的是(正如您在评论中指出的),
getMoreResults(Statement.CLOSE\u ALL\u RESULTS)
应该抛出一个
SQLFeatureNotSupportedException
,如果驱动程序不支持多个打开的结果

然而,apidoc和JDBC规范中描述的
getMoreResults()
的行为确实表明它应该是等效的

JDBC 4.2规范在13.1.2.3中规定:

默认情况下,对方法
getMoreResult
s的每次调用都会关闭以前的所有调用
ResultSet
方法返回的对象
getResultSet


基于此,在不支持多个打开结果的驱动程序中,
getMoreResults()
相当于
getMoreResults(Statement.CLOSE\u CURRENT\u RESULT)
,而在支持多个打开结果的驱动程序中,它相当于
getMoreResults(Statement.CLOSE\u ALL\u results)
。我认为这种区别有点奇怪,也没有必要,因为在一个不支持多个打开结果的驱动程序中,关闭当前结果与关闭所有结果是一样的(因为只有一个结果)。我将与JDBC专家组讨论这个问题。

:“移动到此语句对象的下一个结果,如果它是ResultSet对象,则返回true,并隐式关闭使用getResultSet方法获得的任何当前ResultSet对象。”@a_horse_,没有名称,你是说
getMoreResults()
等同于
getMoreResults吗(关闭当前结果)
或to
getMoreResults(关闭所有结果)
?我无法从您的评论中得出您支持的答案。反参数:根据JavaDoc,如果
DatabaseMetaData.supportsMultipleOpenResults()
为false,
getMoreResults(关闭所有结果)
应该抛出
SQLFeatureException
,但是
getMoreResults()
不应该抛出
SQLFeatureException
。在我看来,这意味着
getMoreResults()
getMoreResults(关闭所有结果)
是不等价的,而且
getMoreResults()
实际上相当于
getmoresults(CLOSE\u CURRENT\u RESULT)
@SimonKissane,这是一个很好的观点。尽管如此,
getmoresults()
谈论的是“
ResultSet
object*(s)*”我认为这里的Javadoc的措辞非常混乱,无论采用哪种解释,都会有合理的理由支持另一种解释。@SimonKissane我将与JDBC专家组讨论这个问题,也许他们可以为JDBC 4.3澄清这一点