首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取JDBC中的行数?

如何获取JDBC中的行数?
EN

Stack Overflow用户
提问于 2008-10-02 14:25:36
回答 7查看 91.3K关注 0票数 30

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-10-02 14:34:26

您必须将其作为一个单独的查询来执行,例如:

代码语言:javascript
复制
SELECT COUNT(1) FROM table_name

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

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

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

票数 32
EN

Stack Overflow用户

发布于 2012-04-13 18:33:09

代码语言:javascript
复制
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! :)
票数 21
EN

Stack Overflow用户

发布于 2008-10-02 14:26:43

简短的回答是:你不能。

长答案:不能,部分原因是数据库可能懒惰地计算查询,只返回您请求的行。

编辑:使用可滚动的ResultSet,您可以:)

实际上,我很久以前就在Java数据库新闻组中提出过这个问题(回到2001年!)喝了点helpful responses

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/162571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档