首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在调用*sql.Tx.Rollback()之前必须先调用*sql.Rows.Close()吗?

在调用*sql.Tx.Rollback()之前必须先调用*sql.Rows.Close()吗?
EN

Stack Overflow用户
提问于 2019-04-29 10:25:31
回答 1查看 375关注 0票数 1

当我使用golang的sql包时,如果我在transaction中进行查询,在调用rows.Scan()时遇到错误,那么在这之后我应该首先调用哪个方法呢?*sql.Tx.Rollback()还是*sql.Rows.Close()?目前我在*sql.Tx.Rollback()之前调用*sql.Rows.Close(),但是我想知道,如果我颠倒这个顺序会发生什么?

代码语言:javascript
运行
复制
tx, err := db.Begin()
if err != nil {
    ... // handle error
}


rows, err := tx.Query("sqlstmt")
if err != nil {
    ... // handle error
}


defer rows.Close() // can I use defer at this place, though it will be called after tx.Rollback()?


if err := rows.Scan(vars...); err != nil {
    if e := tx.Rollback(); e != nil {
        log(e)
        return e
    }
    return err
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 11:41:49

https://go-review.googlesource.com/c/go/+/44812/

代码在这里

即使跳过事务内的rows.Close()也没关系

当事务具有commit或rollback时,将按事务上下文关闭行。

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

https://stackoverflow.com/questions/55896253

复制
相关文章

相似问题

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