当前位置: 首页 > 知识库问答 >
问题:

我应该在什么时间指定 setFetchSize()?

瞿兴朝
2023-03-14

我看到很多关于JDBC/MySQL的“最佳实践”指南告诉我指定setFetchSize()。

但是,我不知道什么时候指定,以及指定什么(语句、结果集)。

Statement.setFetchSize() or PreparedStatement.setFetchSize() 
ResultSet.setFetchSize()
    < li >在这两个选项中,我应该指定什么? < li >在javadoc和oracle文档中,这是我对“何时”感到困惑的地方

Javadoc

默认值由创建结果集的语句对象设置。提取大小可以随时更改。

甲骨文文档

在生成结果集后,对语句对象的获取大小所做的更改将不会影响该结果集。

如果我错了,请纠正我。这是否意味着 setFetchSize 在执行查询之前只是 Affective?(因此,在 ResultSet 上设置FetchSize 是无用的吗?但碰巧的是“获取大小可能随时更改”?

共有2个答案

王伯寅
2023-03-14

找到了一篇很好的文章,并为您的问题提供了示例:

https://www.baeldung.com/jdbc-resultset

7.1。在语句7.2上使用获取大小。在ResultSet上使用获取大小

淳于健
2023-03-14

您应该从结果集的官方文档中阅读此页面。上面写着

默认情况下,ResultSets会完全检索并存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于MySQL网络协议的设计更容易实现。如果您使用的ResultSets具有大量行或大值,并且无法在JVM中为所需内存分配堆空间,您可以告诉驱动程序一次将结果流式传输回一行。

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
                            java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

前向只读结果集与整数获取大小的组合。MIN_VALUE用作驱动程序的信号,以逐行流式传输结果集。之后,将逐行检索使用该语句创建的任何结果集。

实际上,仅设置fetchSize对连接器-j实现没有影响。

 类似资料:
  • 有没有人遇到过使用场景?由于是默认选项,我看不到你什么时候会使用它。

  • 问题内容: 有什么区别?什么时候应该使用容量为1的对抗? 问题答案: SynchronousQueue更像是一个传递,而LinkedBlockingQueue仅允许单个元素。区别在于对SynchronousQueue的put()调用直到有相应的take()调用 才返回 ,但LinkedBlockingQueue的大小为1,则put()调用(对空队列)将立即返回。 我不能说自己曾经直接使用过Sync

  • 问题内容: 我对使用和翻译有疑问。我了解到,在模型中,我应该使用。但是还有其他地方我也应该使用吗?表单定义呢?它们之间是否存在性能差异? 编辑: 还有一件事。有时候,代替被使用。正如文档所述,仅在将字符串显示给用户之前,才将字符串标记为要翻译,并在可能的最新情况下进行翻译,但是我在这里有点困惑,这与功能相似吗?我仍然很难决定在模型和表格中应该使用哪个。 问题答案: ugettext() 与 uge

  • 我想知道什么时候可以有效地使用。我不确定到底有多有用,有三个原因。 (请将start和end视为整数。) > 如果我想要一个数组,,下面的代码要快得多。 我不认为仅仅获取从到的数字是有用的。我可以将

  • 问题内容: 我在ORM上还很新。我刚刚开始阅读有关使用Hibernate的Java Persistence API的书籍和文档。 我只是想知道,关闭EntityManagerFactory与jdbc数据库连接关闭类似吗? 我们是否应该在每次持久/更新/删除后关闭它?如果我们不关闭它,数据库连接会保持打开状态吗? 问题答案: 我只是想知道,关闭与jdbc数据库连接关闭类似吗? 这并非完全正确,但关闭

  • 问题内容: 我正在使用’multiprocess.Pool.imap_unordered’如下 我需要打电话或之后的for循环? 问题答案: 不,您没有,但是如果您不再使用游泳池,那可能是个好主意。 Tim Peters在此SO帖子中致电或致电的理由很明确: 至于Pool.close(),您应该在永远不会将更多工作提交给Pool实例的情况下(且仅在)进行调用。因此,通常在主程序的可并行化部分完成时