使用jdbc和oracle驱动程序时存储结果集的位置

Blu*_*bel 10 java mysql jdbc relational-database

一旦我使用带有oracle驱动程序的jdbc并运行select查询,查询的结果是存储在oracle内存或文件系统或临时表的服务器中?

一旦我通过获取下一行来运行下一个方法,它是从oracle服务器内存加载到jvm内存吗?

如果我将结果集上的获取大小数定义为1000,这是否意味着1000行从oracle加载到JVM上的JDBC驱动程序?

Bhu*_*han 9

将在本地内存中提取默认行数(不是整个结果集).一旦到达获取行的最后一行(比如通过执行next()并尝试访问下一行),如果结果中有更多行,则将对数据库进行另一次往返调用以获取下一行批次行.

编辑1:

您可以通过执行此操作来查看结果集一次获取的行数(请验证语法):

rs.beforeFirst(); // will put cursor before the first row
rs.last(); // will put cursor after the last line
int noOfRows = rs.getRow(); // will give you the current row number
Run Code Online (Sandbox Code Playgroud)

编辑2:

如果要在本地内存中获取比平常更多的行,可以考虑使用CachedRowSet.即使这样也会进行往返,但通常会低于正常的结果集.但是,您应该考虑对您的应用程序进行一些性能检查.


awm*_*awm -3

执行查询后,数据将返回到 JVM。JVM 处理从该点开始的所有数据 I/O。

  • @BlueLabel:您不应该一次选择 1.000.000 行。一定有更好的解决方案来解决您的问题。 (2认同)
  • 堆是提前分配的,它不应该增加。也像 Martijn 所说的那样,如果您拉入 1,000,000 行,那么您就做错了。 (2认同)