如何在 JDBC 中获取行计数?

2022-09-01 10:08:44

我执行了一个 JDBC 查询来获取结果集。在迭代它之前,我想快速找出返回了多少行。如何以高性能做到这一点?

我使用的是Java 6,Oracle 11g和最新的Oracle JDBC驱动程序。


答案 1

您必须将此作为单独的查询来执行此操作,例如:

SELECT COUNT(1) FROM table_name

一些JDBC驱动程序可能会告诉您,但这是可选行为,更重要的是,驱动程序可能还不知道。这可能是由于如何优化查询,例如Oracle中的两个示例执行策略是尽快获取所有行或尽快获取第一行。

如果您执行两个单独的查询(一个是计数,另一个是查询),则需要在同一事务中执行它们。这在Oracle上可以很好地工作,但在其他数据库上可能会有问题(例如,SQL Server将根据您的隔离级别向您显示未提交的数据或阻止外部未提交的更新,而Oracle支持隔离级别,该隔离级别为您提供事务一致的数据视图,而不会阻止外部更新)。

通常,尽管有多少行并不重要。通常,这种类型的查询要么是批处理的,要么是分页的,无论哪种方式,您都可以以加载/处理行的形式获得进度信息,并且可以检测到结果集的结尾(显然)。


答案 2
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! :)

推荐