Java 带SQL Server的JDBC结果集

Java 带SQL Server的JDBC结果集,java,sql-server,jdbc,resultset,Java,Sql Server,Jdbc,Resultset,当使用JDBC createStatement进行查询并获得数百万行的结果集(来自SQL Server)时,实际执行的SQL查询是什么,这些行存储在哪里,以及有多少行?它是否使用SQL Server游标? 我知道客户端内存(Java代码所在的位置)中只保留了有限数量的行,那么其余的行保存在哪里,或者可能还没有从SQL Server查询到)? 当我查看SQL Server profiler时,它只显示普通查询(它没有添加光标或其他内容的顶部X)取自: 通常,当MicrosoftJDBCDriver

当使用JDBC createStatement进行查询并获得数百万行的结果集(来自SQL Server)时,实际执行的SQL查询是什么,这些行存储在哪里,以及有多少行?它是否使用SQL Server游标? 我知道客户端内存(Java代码所在的位置)中只保留了有限数量的行,那么其余的行保存在哪里,或者可能还没有从SQL Server查询到)? 当我查看SQL Server profiler时,它只显示普通查询(它没有添加光标或其他内容的顶部X)

取自:

通常,当MicrosoftJDBCDriverforSQLServer执行查询时,驱动程序会将所有结果从服务器检索到应用程序内存中。尽管这种方法可以最大限度地减少SQL Server上的资源消耗,但对于产生非常大结果的查询,它可能会在JDBC应用程序中抛出OutOfMemoryError

有一种方法可以解决这个问题,SQL Server称之为
自适应缓冲
,对于
JDBC驱动程序版本2+
,它似乎在默认情况下是启用的,您可能希望在文档中阅读它。要点如下:

为了允许应用程序处理非常大的结果,MicrosoftJDBCDriverforSQLServer提供了自适应缓冲。通过自适应缓冲,驱动程序可以根据应用程序的需要从SQL Server检索语句执行结果,而不是一次检索所有结果


您能用任何例子详细说明您的问题吗?在使用JDBC的java中,我向SQL Server发送一个查询,返回ResultSet。在我的java代码中,我使用了一个循环。类似于:while(resultSet.nexy())。假设我的查询返回数百万行,这些行保存在哪里?SQL如何执行此查询?它是否使用SQL游标?请回答您的问题,不要在注释中提供附加信息。这不是附加信息,只是试图澄清相同的问题。我仍然不理解SQL在自适应缓冲模式下的作用?它如何查询数据库,何时在临时表中保留完整的结果?从客户端看,没有区别。执行SQL,就是这样。但是,我不知道自适应缓冲在SQL server内部是如何工作的。我询问的原因是,如果我同时使用ResultSet进行多个大型查询,则验证SQL server不会自行进入内存不足状态