当前正在部署基于OFBiz的ERP,我们遇到了以下问题:框架的一些代码调用resultSet.last()来了解结果集的总行数。使用Oracle JDBC Driver v11和v10,它会尝试缓存客户机内存中的所有行,导致JVM崩溃,因为它没有足够的堆空间。Oracle是否通过JDBC支持服务器端可滚动游标?
经过研究,问题似乎是Oracle JDBC通过使用缓存在客户端而不是服务器中实现Scrollable Cursor。使用datadirect驱动程序,该问题已解决,但似乎对resultset.last()的调用需要太多才能完成,因此应用程序服务器会中止事务
是否有任何方法通过jdbc实现可滚动游标oracle而不诉诸于datadirect驱动程序?
什么是知道给定结果集长度的最快方法?
在此先感谢 伊斯梅尔
我会先问一个切线问题;你同时需要结果集的数据和大小,还是只需要执行一个COUNT(*)类型的查询来查找行数?你是否真的需要行数呢?我曾多次看到过这样的情况:如果程序在真正不需要的时候花费很多时间获取分页行的总数,那么这种情况非常昂贵。 – Gandalf 2009-06-29 21:32:02
需要确定分页方案中的页数。我们试图避免使用last,并使用iterator next()方法检查null来计算currentIndex。有没有一种快速的方法来知道没有使用last()方法的页数。 我们的解决方法是使用相同的条件执行COUNT查询,然后执行数据查询 – Ismael 2009-06-29 22:04:42