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