正如标题所述,Java ResultSet
对象识别的最大大小是多少?特别是setFetchSize函数。
ResultSet results...;
results.setFetchSize(HUGE_VALUE);
更重要的是,如果没有“最大值”,那么获取大小的限制因素是什么?
COMMENT
int是数据类型,所以我猜它会接受MAX_INT,剩下的 事情依赖于驱动程序。
因为它可能与我的问题几乎没有关系,所以我问了什么是被认可的,而不是我可以传递给它的东西。虽然听起来像是分裂头发,但这就是这个问题的本质。
更新
因为这似乎得到一些“不是真正的问题”关闭投票。这特别适用于Oracle JDBC驱动程序ojdbc14
。正如有人在下面发布的那样,我正在撤回数以亿计的结果集,因此基于我的测试,30或200远不及正确的获取大小的正确答案。目前,我的获取大小为10,000,000
,但我无法验证数据库是否使用了1000万的大小。此外,我了解数据库提示的工作原理,根据我的经验,您通常可以使数据库使用您提供的提示。
答案 0 :(得分:0)
我怀疑setFetchSize()
方法没有按照您的想法进行操作,建议您仔细阅读以下两篇文章,并在使用10,000,000之前进行一些严格的分析。 This article解释了JDBC setFetchSize
如何等同于Oracle的预取功能。它还演示了如何设置一些简单的分析来检查不同提取大小的效果。 This article(由第一个链接)解释了预取没有最大值(除了我假设MAX_INT),但警告使用远大于几百的值。第二篇文章还提到了以下内容,进一步确认了setFetchSize和预取之间的联系:
不要混用JDBC 2.0 fetch size应用程序编程接口 (API)和应用程序中的Oracle行预取API。您可以 使用其中一个,但不是两个。
答案 1 :(得分:-1)
这是对数据库的提示。有些人可能甚至没有使用这个提示。其他人可能允许非常大的值,直到int数据类型限制。然而,大多数人会接受这个提示达到最大的合理价值。请记住,此数字越大,处理结果时需要使用的内存越多。
这只是好奇心,还是您打算将此设置为您的数据库最大提取大小?如果是后者,我会强烈要求你反对。相反,根据不同的提取大小提示进行一些测试和性能测试。在一些数据库30上可能是最佳的,200使得处理更慢。正确的数字还取决于行的大小或任何blob数据等。
因此,一个更好的问题可能是 - 在这个特定数据库上查询的最佳提取大小是什么,答案是尝试它们并测量性能。