【发布时间】:2011-03-04 10:07:29
【问题描述】:
有没有人知道一种更好的方法来获取从 MySQL 数据库返回的 Java 结果集中的行数?返回的结果集不会是从数据库中读取的总行数,所以我认为我不能使用 SQL 的 COUNT 聚合函数。
public static int getResultSetRowCount(ResultSet resultSet) {
int size = 0;
try {
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();
}
catch(Exception ex) {
return 0;
}
return size;
}
【问题讨论】:
-
调用 resultSet.last() 将导致结果集实际上遍历所有记录 - 所以它显然是低效的。即使您还不需要它,它也会强制将所有数据缓存到内存中。您为什么说“他返回的结果集不会是从数据库中读取的总行数”?
-
@RonK:你认为它为什么会一直迭代?我在文档中找不到类似的内容。
-
@Ronk:从数据库表读取的数据将只是表数据的子集,而不是表中的所有数据。不过,我对“全面迭代”感到好奇。
-
@Adeel Ansari:我不是 100% 确定,我反编译了 Oracle 的结果集,发现在调用 'last()' 方法的流程中, 'cacheAllRows()' 方法被调用,并且该方法以“while(resultSet.next())”开头。我认为 MySQL 驱动程序不会有更好的事情要做。
-
@Mr Morgan:正如下面的一些答案所述 - 如果你有一个获取数据的 SQL,你可以有相同的返回 COUNT() - 我看不出为什么它不能工作。