温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

结果集和游标啥关系

发布时间:2026-07-15 14:38:09 来源:亿速云 阅读:83 作者:小樊 栏目:数据库

在数据库里,结果集(ResultSet)游标(Cursor) 经常一起出现,但不是一个东西,可以理解为:

结果集是“数据集合”,游标是“用来遍历这个结果集的机制”。

下面用通俗一点的方式解释它们的关系。


一、什么是结果集(ResultSet)

结果集是:

  • 执行一条 SQL 查询(如 SELECT)后,数据库返回的数据集合
  • 本质是一张临时表(逻辑上的)

例如:

SELECT id, name FROM user;

数据库返回的就是一个结果集,包含若干行数据。


二、什么是游标(Cursor)

游标是:

  • 用来逐行访问结果集的一种机制
  • 相当于一个“指针”,指向结果集中的某一行

你可以:

  • 向前移动
  • 读取当前行
  • 在某些数据库中还可以向后、滚动

三、它们的关系(核心)

游标依附于结果集存在

可以理解为:

结果集 = 数据
游标   = 读数据的“指针”

形象比喻

  • 结果集:一本书
  • 游标:你的手指
  • 你用手指一页一页翻书,才能读到内容

没有书(结果集),手指(游标)就没有意义。


四、不同场景下的体现

1️⃣ JDBC(Java)

ResultSet rs = stmt.executeQuery("SELECT * FROM user");

while (rs.next()) {
    System.out.println(rs.getString("name"));
}
  • ResultSet:结果集
  • rs.next():移动游标
  • 游标默认指向“第一行之前”

2️⃣ 数据库存储过程(如 Oracle / MySQL

DECLARE
  CURSOR c_user IS
    SELECT id, name FROM user;
BEGIN
  FOR r IN c_user LOOP
    DBMS_OUTPUT.PUT_LINE(r.name);
  END LOOP;
END;
  • CURSOR:显式游标
  • 查询结果集由游标控制访问

3️⃣ 数据库内部实现角度

  • 查询 → 生成结果集
  • 数据库内部用游标:
    • 控制读取进度
    • 支持流式读取(避免一次性加载)

五、常见误区

❌ 游标就是结果集
✅ 游标是访问结果集的方式

❌ 所有结果集都有游标(对应用层来说)
✅ 底层一定有,但有些接口(如 ORM)把它隐藏了


六、一句话总结

结果集是“查出来的数据”,游标是“用来一行一行读这些数据的工具”。

如果你愿意,我也可以结合 MySQL / Oracle / PostgreSQLJDBC / MyBatis 给你更具体的例子。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI