在数据库编程中,**Cursor(游标)**用完后必须关闭并释放,否则会占用数据库连接、内存,甚至导致连接池耗尽或锁表。
下面按常见语言/场景说明如何正确关闭和释放游标。
try / finally(最稳妥)cursor = conn.cursor()
try:
cursor.execute("SELECT * FROM user")
rows = cursor.fetchall()
finally:
cursor.close()
with(推荐 ✅)with conn.cursor() as cursor:
cursor.execute("SELECT * FROM user")
rows = cursor.fetchall()
# 自动关闭 cursor
conn.close() # 所有 cursor 都会被关闭
⚠️ 但不要依赖连接关闭来释放游标,应显式关闭。
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user");
// 使用 rs
rs.close();
stmt.close();
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user")) {
// 使用 rs
}
// 自动关闭
DECLARE cur CURSOR FOR SELECT id FROM user;
OPEN cur;
-- 使用
CLOSE cur;
✅ 存储过程结束前 一定要 CLOSE
✅ 可结合 DECLARE EXIT HANDLER 防止异常未关闭
CLOSE cursor_name;
ResultSet.close() 即释放游标❌ 只关闭连接不关闭游标
❌ 异常时未关闭(必须用 try/finally 或 with)
❌ 长事务中一直持有游标
游标用完立即关闭,优先用
with/ try-with-resources,不要等连接关闭才释放。
如果你说的是 某个具体语言(Python / Java / Go / Node) 或 某个数据库(MySQL / Oracle / PostgreSQL),告诉我,我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。