我执行了一个JDBC查询来获得结果集。在迭代之前,我想快速找出返回了多少行。如何才能在高性能的情况下做到这一点?
我使用的是Java 6、Oracle 11g和最新的Oracle JDBC驱动程序。
发布于 2008-10-02 14:34:26
您必须将其作为一个单独的查询来执行,例如:
SELECT COUNT(1) FROM table_name一些JDBC驱动程序可能会告诉您,但这是可选的行为,更重要的是,驱动程序可能还不知道。这可能是由于查询是如何优化的,例如,Oracle中的两个示例执行策略是尽可能快地获取所有行或尽可能快地获取第一行。
如果您执行两个单独的查询(一个是计数,另一个是查询),那么您将需要在同一事务中执行它们。这在Oracle上可以很好地工作,但在其他数据库上可能会有问题(例如,SQL Server将根据您的隔离级别显示未提交的数据或在外部未提交的更新上阻塞,而Oracle支持的隔离级别可以为您提供事务上一致的数据视图,而不会阻塞外部更新)。
不过,通常情况下,有多少行并不重要。通常,这种类型的查询要么是批处理的,要么是分页的,无论哪种方式,您都可以以加载/处理的行的形式获得进度信息,并且您可以检测结果集的结尾(显然)。
发布于 2012-04-13 18:33:09
ResultSet rs = stmt.executeQuery(sql);
int rowCount = rs.last() ? rs.getRow() : 0; // Number of rows in result set. Don't forget to set cyrsor to beforeFirst() row! :)发布于 2008-10-02 14:26:43
简短的回答是:你不能。
长答案:不能,部分原因是数据库可能懒惰地计算查询,只返回您请求的行。
编辑:使用可滚动的ResultSet,您可以:)
实际上,我很久以前就在Java数据库新闻组中提出过这个问题(回到2001年!)喝了点helpful responses。
https://stackoverflow.com/questions/162571
复制相似问题