在 Statement 和 ResultSet 上设置提取大小之间的区别

Posted

技术标签:

【中文标题】在 Statement 和 ResultSet 上设置提取大小之间的区别【英文标题】:Difference between setting a fetch size on Statement vs ResultSet 【发布时间】:2016-05-23 15:03:43 【问题描述】:

在 Statement 和 ResultSet 上设置提取大小有什么区别? Oracle 文档说,如果在 Statement 上设置了获取大小,那么 ResultSet 也使用相同的大小,只要在获取结果集之前设置了获取大小。如果我在 Statement 或 ResultSet 上设置它有什么区别?我正在使用 Oracle 数据库。以下是有关它的 Oracle 文档:

获取大小

默认情况下,当 Oracle JDBC 运行查询时,它一次从数据库游标中检索 10 行的结果集。这是默认的 Oracle 行提取大小值。您可以通过更改行提取大小值来更改每次访问数据库游标时检索的行数。

标准 JDBC 还允许您指定查询的每次数据库往返获取的行数,该数字称为获取大小。在 Oracle JDBC 中,行预取值用作语句对象中的默认提取大小。设置提取大小会覆盖行预取设置并影响通过该语句对象运行的后续查询。

获取大小也用于结果集中。当语句对象运行查询时,语句对象的获取大小被传递给查询产生的结果集对象。但是,您也可以在结果集对象中设置提取大小以覆盖传递给它的语句提取大小。

【问题讨论】:

【参考方案1】:

获取大小真正重要的唯一地方是ResultSet。创建ResultSet 时,它会从用于创建它的Statement 获取其提取大小,但以后可以更改。

Statement 的提取大小视为默认值,该大小将传递给它创建的所有ResultSets。如果你不想使用这个默认值,你可以覆盖它。

【讨论】:

【参考方案2】:

没有区别。如果您在语句上设置提取大小,那么它将应用于来自该语句的所有 ResultSet 实例。

【讨论】:

略有不同。语句上设置的提取大小将用于第一次提取。在返回结果集时,第一次提取已完成,因此控制第一次提取大小的唯一方法是在语句中设置它。如果您知道特定查询仅返回一行,那么在结果集上将 fetch size 设置为 1 将不会执行任何操作,因为在您的代码可以访问要设置的结果集之前,该语句的 fetch size 已经用于检索一行提取大小为一。

以上是关于在 Statement 和 ResultSet 上设置提取大小之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

JDBC学习笔记——Statement和ResultSet

在Java中 Connection、Statement、ResultSet 、PreparedSta

何时关闭 JDBC 中的 Connection、Statement、PreparedStatement 和 ResultSet

jdbc数据库连接在方法中,而且要返回statement 或resultset 在方法里关闭连接会怎么样?要怎么处理?

什么是Statement

ResultSet连续通过Statement赋值,会出现错误