JDBC结果集存储在?

JDBC结果集存储在?,jdbc,resultset,heap-memory,sap-ase,Jdbc,Resultset,Heap Memory,Sap Ase,我知道这可能是一个蹩脚而愚蠢的问题,但我无法找出JDBC resultset的内部工作策略,也无法通过运行一些示例来找到解决方法。。问题是结果集实际存储在哪里?它位于JVM的堆空间还是数据库临时位置 例如,假设我有一个包含1000行的表,当我执行查询以获取结果集时,获取大小为20(或供应商imp设置的默认大小),那么这20行存储在哪里?我知道jdbc不会一次提取所有1000行并将其保存在内存中,但一次只能处理几行 数据库:Sybase Ase JDBC版本:jdbc3/jdbc4(使用jconn

我知道这可能是一个蹩脚而愚蠢的问题,但我无法找出JDBC resultset的内部工作策略,也无法通过运行一些示例来找到解决方法。。问题是结果集实际存储在哪里?它位于JVM的堆空间还是数据库临时位置

例如,假设我有一个包含1000行的表,当我执行查询以获取结果集时,获取大小为20(或供应商imp设置的默认大小),那么这20行存储在哪里?我知道jdbc不会一次提取所有1000行并将其保存在内存中,但一次只能处理几行

数据库:Sybase Ase
JDBC版本:jdbc3/jdbc4(使用jconnjars)


请让我知道,因为我无法得到这个确切的问题的答案,或者如果你能告诉我正确的材料,我会看看它。谢谢

这取决于驱动程序的实现,但通常在堆中。@MarkrotVeel,好的,所以通常在我尝试查询时,jdbc与数据库建立连接,并从数据库中拉入第一个x记录并存储在堆空间中,处理完成。当光标在heap mem中没有更多的行时,会再次进行DB调用吗?或者完整的结果已经在JDBC驱动程序中可用,而只是将记录转换到客户端进行处理?希望我把问题说清楚,如果没有请让我知道!简单地说,为要处理的结果集保存的完整DB查询集在哪里..1)JDBC(类型4)是客户端,2)详细信息取决于驱动程序和数据库的实现。然而,大致上,驱动程序从数据库中请求X条记录,并将这些记录存储在堆中。当它需要更多时,它要求更多。如果数据库中的所有行都已具体化,或者根据需要生成这些行,则取决于多个因素,这些因素高度依赖于数据库、查询等。谢谢,因此,对于每个X记录,都会进行一次数据库调用。我们在这里处理的查询只是一个“select*from table”,没有任何限制或偏移量。。您能告诉我哪种情况适合“如果数据库中的所有行都已物化”条件吗?当你说它要求更多的时候,它会再次查询select*内容吗?或者是否有一个临时内部数据库内存,用于存储上述查询的所有结果,并且在调用rs.next时,它只从临时数据库内存获取数据?