gpt4 book ai didi

java - Oracle 是否支持通过 JDBC 的服务器端可滚动游标?

转载 作者:行者123 更新时间:2023-11-30 12:01:09 26 4
gpt4 key购买 nike

目前正在部署基于 OFBiz 的 ERP,我们遇到了以下问题:框架的一些代码调用 resultSet.last() 来了解结果集的总行数。使用 Oracle JDBC 驱动程序 v11 和 v10,它会尝试缓存客户端内存中的所有行,导致 JVM 崩溃,因为它没有足够的堆空间。

经过研究,问题似乎是Oracle JDBC通过使用缓存在客户端而不是在服务器端实现了Scrollable Cursor。使用 datadirect 驱动程序,该问题已解决,但似乎对 resultset.last() 的调用需要太多时间才能完成,因此应用程序服务器中止了事务

有没有办法在 oracle 中通过 jdbc 实现可滚动游标而不求助于 datadirect 驱动程序?

知道给定结果集长度的最快方法是什么?

提前致谢伊斯梅尔

最佳答案

“知道给定结果集长度的最快方法是什么”真正知道的唯一方法是数一数。您想知道电话簿中有多少个“SMITH”。你数一数。如果是小结果集,很快就得出了,那不是问题。 EG 电话簿中不会有很多甘道夫,无论如何你可能都想得到它们。

如果它是一个很大的结果集,您也许可以进行估算,尽管 SQL 的设计通常不适合这种情况。

要避免在客户端缓存整个结果集,可以试试

select id, count(1) over () n from junk;

然后每一行都会有一个额外的列(在本例中为 n),其中包含结果集中的行数。但是到达计数仍然需要相同的时间,因此超时的可能性仍然很大。

妥协是获取前一百(或一千)行,不要担心超出此范围的分页。

关于java - Oracle 是否支持通过 JDBC 的服务器端可滚动游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com