sql - SQL Next 不前进游标
问题描述
我有一个函数用于迭代查询的结果集:
func readRows(rows *sql.Rows, translator func(*sql.Rows) error) error {
defer rows.Close()
// Iterate over each row in the rows and scan each; if an error occurs then return
for shouldScan := rows.Next(); shouldScan; {
if err := translator(rows); err != nil {
return err
}
}
// Check if the rows had an error; if they did then return them. Otherwise,
// close the rows and return an error if the close function fails
if err := rows.Err(); err != nil {
return err
}
return nil
}
该translator
函数主要负责调用Scan
对象*sql.Rows
。这方面的一个例子是:
readRows(rows, func(scanner *sql.Rows) error {
var entry gopb.TestObject
// Embed the variables into a list that we can use to pull information out of the rows
scanned := []interface{}{...}
if err := scanner.Scan(scanned...); err != nil {
return err
}
entries = append(entries, &entry)
return nil
})
我为这段代码写了一个单元测试:
// Create the SQL mock and the RDS reqeuster
db, mock, _ := sqlmock.New()
requester := Requester{conn: db}
defer db.Close()
// Create the rows we'll use for testing the query
rows := sqlmock.NewRows([]string{"id", "data"}).
AddRow(0, "data")
// Verify the command order for the transaction
mock.ExpectBegin()
mock.ExpectQuery(regexp.QuoteMeta("SELECT `id`, `data`, FROM `data`")).WillReturnRows(rows)
mock.ExpectRollback()
// Attempt to get the data
data, err := requester.GetData(context.TODO())
但是,它似乎Next
被无限调用。我不确定这是sqlmock
我的代码的问题还是问题。任何帮助,将不胜感激。
解决方案
推荐阅读
- ftp - 使用 WinSCP 在日期范围内下载文件时“缺少命令 'get' 的参数”
- python - 高维中的numpy非规范点积
- sql-server - 使用 Powershell 脚本输出文件具有相同的重复行
- r - Simba Athena ODBC:无法使用 SQLGetPrivateProfileString 函数
- flutter - 颤动的riverpod ConsumerWidget没有被重建
- typescript - 打字稿:根据参数在函数响应中包含键
- typescript - 不在“rootDir”“c:/Users/hasit/Desktop/typescript/src”下。'rootDir' 应包含所有源文件。”
- installation - 当包管理器尝试从命令行安装它们时,是否可以对所需的 nuget 列表进行排序以使其不崩溃?
- reactjs - React.js:如何在 React 中显示生日字段直到日期?
- android - 当我在 MAINACTIVTY 中添加 INTENT 后尝试运行我的应用程序时,它显示此错误