什么时候应该指定setFetchSize()?

时间:2014-01-03 09:02:53

标签: java mysql sql oracle jdbc

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

但是,我不知道何时指定,以及要指定的内容(语句,结果集)。

Statement.setFetchSize() or PreparedStatement.setFetchSize() 
ResultSet.setFetchSize()
  1. 在这两个中,我应该指定什么?
  2. 来自javadocoracle documentation,这是我对“何时”感到困惑的地方
  3. 的Javadoc

      

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

    Oracle Doc

      

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

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

2 个答案:

答案 0 :(得分:5)

您应该从结果集上的官方文档中阅读此page。它说

  

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

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

只读的只读结果集与提取大小Integer.MIN_VALUE的组合用作驱动程序逐行传输结果集的信号。在此之后,将逐行检索使用该语句创建的任何结果集。

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

答案 1 :(得分:0)

找到了一篇很好的文章,其中包含示例您的问题:

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

7.1。在语句上使用提取大小 7.2。在ResultSet上使用访存大小

相关问题