我看到了很多有关JDBC / MySQL的“最佳实践”指南,它们告诉我指定setFetchSize()。
但是,我不知道何时指定以及要指定什么(语句,结果集)。
Statement.setFetchSize() or PreparedStatement.setFetchSize() ResultSet.setFetchSize()
Java文档
默认值由创建结果集的Statement对象设置。提取大小可以随时更改。
甲骨文文档
生成结果集后,对语句对象的提取大小所做的更改将对该结果集没有影响。
如果我错了,请纠正我。这是否意味着setFetchSize仅在执行查询之前有效?(因此,ResultSet上的setFetchSize是没有用的?但是碰巧“提取大小可能随时更改”?)
您应该从 结果集 的官方文档中阅读此页面。它说 __
默认情况下,完全检索结果集并将其存储在内存中。在大多数情况下,这是最有效的操作方式,而且由于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实现没有影响。