gpt4 book ai didi

sql - 在 Golang 中重用或复制 *sql.Rows

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:21 26 4
gpt4 key购买 nike

是否可以在调用 *sql.Rows.Next() 之后重用相同的 *sql.Rows,以便我可以将它传递给另一个函数?

rows, err := db.Query(...)
for rows.Next() {
// rows.Scan()
}
anotherFunction(rows) // NOT WORKING: This rows became empty.

我试图制作另一个 *sql.Rows 的副本,但没有成功。

rows, err := db.Query(...)
anotherRows := *rows
// PANIC: call of load copies lock value: database/sql.Rows contains sync.RWMutex

最佳答案

database/sql 包不提供任何方法来回滚行,在您阅读它们之后,即它是一个“仅向前”的结果集。

此外,它将在其内部维护与底层(物理)数据库连接的链接,因此复制或传递它不是一个好主意。

如果您需要对数据应用多个函数,只需扫描所有行,获取数据对象的一部分,然后传递它。

扫描将复制您读取的数据:

Scan copies the columns from the matched row into the values pointed at by dest.

这样您就可以安全地关闭您的Rows 对象(释放任何关联的数据库资源)。

在执行查询 (err) 和通过 rows.Err() 读取行之后,您也应该注意错误。

关于sql - 在 Golang 中重用或复制 *sql.Rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44879548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com