代码之家  ›  专栏  ›  技术社区  ›  Ismael

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

  •  2
  • Ismael  · 技术社区  · 17 年前

    经过研究,问题似乎是Oracle JDBC通过使用缓存在客户端而不是服务器中实现了可滚动光标。通过使用datadirect驱动程序,这个问题得到了解决,但对resultset.last()的调用似乎花费了太多时间才能完成,因此应用程序服务器中止了事务

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

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

    提前谢谢 伊斯梅尔

    2 回复  |  直到 17 年前
        1
  •  1
  •   Gary Myers    17 年前

    “了解给定结果集长度的最快方法是什么” 如果这是一个很小的结果集,并且很快就得到了,那么这不是问题。电话簿上不会有很多甘道夫,而且你可能无论如何都想把他们都弄到手。

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

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

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

        2
  •  0
  •   Michal Pravda    17 年前

    您建议的“解决方法”与count基本上是DB server所做工作的两倍。它必须首先遍历所有内容以计算结果的数量,然后执行相同的操作并返回结果。Gary(count(*)over()-analytics)提到的方法要好得多。但即使在这里,在将第一个输出返回给客户机之前,也必须创建整个结果集。因此,对于大型输出,它可能会降低内存消耗。

    我认为最好的方法是只在屏幕上选择您想要的页面(+1)以确定下一个页面是否存在,例如从21到41的行。还有另一个按钮(用例)在(罕见的)有人需要的情况下计算它们。

    推荐文章