MySQL驱动程序将Integer.MIN_VALUE用作切换到流式结果集模式的信号。它不用作值。请参阅“结果集”下的文档。综上所述:
默认情况下,完全检索结果集并将其存储在内存中。您可以通过设置
stmt.setFetchSize(Integer.MIN_VALUE);(与只进,只读结果集结合)告诉驱动程序一次将结果流回一行。
因此,这非常特定于MySQL Connector / J驱动程序。
至于为什么关闭结果集需要花费很长时间,同样的文档也暗示了这一点:“必须先读取(或关闭)结果集中的所有行,然后才能对连接发出任何其他查询,否则将引发异常。“
即关闭结果集将首先读取所有剩余的行,然后关闭结果集。而且由于现在读取行是逐行完成的,因此可能会花费很长时间。
看来(我没有测试它)有流播结果集可能会做你想要什么(不使用MySQL的限制条款)的替代,它涉及到配置性能
useCursorFetch=true和使用情况进行了说明这里。



