请问:java.sql.RetsultSet中的.last()的操作机制是什么?此操作效率很低。

fetch 2004-10-25 03:17:57
我在执行了.executeQuery()之后,通过.last()得到纪录的行数。
但这样做很耗时,为什么?
希望解析以下.last()内部实现过程。
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fetch 2004-10-25
  • 打赏
  • 举报
回复
OK,谢谢各位。

结贴
crowntree 2004-10-25
  • 打赏
  • 举报
回复
不同数据库实现还会不一样?这个能详细些吗? 就是说不同数据库的jdbc接口实现方式不一样,有的数据库可能在内部对这些接口作了优化,而有些数据库甚至有些驱动直接是遍历的结果集 当然效率不一样了,jdbc只是个接口规范 实现不实现 如何实现都是厂家的事
fetch 2004-10-25
  • 打赏
  • 举报
回复
to tigeryu(吴越小虎) :
不同数据库实现还会不一样?这个能详细些吗?

另外:
.last()内部过程是不是相当于(我知道结果是一样的,但关键是内部实现):
while(!(rs.isLast()))
{
rs.next();
}
mooniscrazy 2004-10-25
  • 打赏
  • 举报
回复
这个是因为使用.last()实际上迭代访问了所有记录,在纪录数很多的情况下效率当然很低
用别的办法,比如select count
不过效率也不是很高,当数据量很大的时候。数据库索引对这个有影响
wuyue-tiger 2004-10-25
  • 打赏
  • 举报
回复
ResultSet是接口,不同数据库JDBC驱动的实现可能完全不同,只是这样的做法一定不会效率太高的
fetch 2004-10-25
  • 打赏
  • 举报
回复
等了好久没人来,自己ding.
fetch 2004-10-25
  • 打赏
  • 举报
回复
这个我知道,我是说我通过.last()之后这样得到记录数:
if (rs.last())
{
count = rs.getRow();
}
dropship 2004-10-25
  • 打赏
  • 举报
回复
.last()不是得到记录的行数,在jdk文档中如此描述:
public boolean last()
throws SQLException

Moves the cursor to the last row in this ResultSet object.

Returns:
true if the cursor is on a valid row; false if there are no rows in the result set
Throws:
SQLException - if a database access error occurs or the result set type is TYPE_FORWARD_ONLY

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧