使用JDBC createStatement进行查询并从SQL Server获取数百万行的ResultSet时,真正执行哪些SQL查询,将这些行存储在哪里以及多少行?它使用SQL Server游标吗?我知道客户端存储区(Java代码在其中)仅保留了有限数量的行,那么其余的行又保存在哪里,或者也许尚未从SQL Server中查询到它们?当我查看SQL Server事件探查器时,它仅显示普通查询(它未添加游标或其他内容的TOP X)
问题来源:stackoverflow
取自有关自适应缓冲的SQL Server文档:
通常,当用于SQL Server的Microsoft JDBC驱动程序执行查询时,驱动程序会将所有结果从服务器检索到应用程序内存中。尽管这种方法最大程度地减少了SQL Server上的资源消耗,但是它可以在JDBC应用程序中引发产生非常大结果的查询的OutOfMemoryError。
有一种解决方法,即SQL Server调用的内容Adaptive Buffering以及默认情况下已启用的功能JDBC driver version 2+,您可能需要在文档中进行阅读。这是要点:
为了使应用程序能够处理非常大的结果,用于SQL Server的Microsoft JDBC驱动程序提供了自适应缓冲。通过自适应缓冲,驱动程序可以在应用程序需要时从SQL Server中检索语句执行结果,而不是一次全部检索。
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。