postgresql - 如何在单值上下文中修复多值 stmt.Query()
问题描述
我在下面的代码中遇到了上述问题
stmt, err2 := db.Prepare( "SELECT COUNT(*) FROM xyz WHERE product_id=? and chart_number=?")
rows, err2 := stmt.Query( bidStatusReqVal.ProductId,bidStatusReqVal.ChartNumber).Scan(&count)
解决方案
Query(...).Scan(...)
无效,因为Query
返回两个值并且调用链要求前一个调用只返回一个值。调用Scan
返回的rows
,或QueryRow(...).Scan(...)
仅使用 witherr
作为返回目的地。
rows, err := stmt.Query(bidStatusReqVal.ProductId, bidStatusReqVal.ChartNumber)
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
if err := rows.Scan(&count); err != nil {
return err
}
}
if err := rows.Err(); err != nil {
return err
}
// ...
在查询仅返回单行的情况下,例如SELECT ... LIMIT 1
,或者SELECT COUNT(*) ...
像您的情况一样,使用更方便QueryRow
。
err := stmt.QueryRow(bidStatusReqVal.ProductId, bidStatusReqVal.ChartNumber).Scan(&count)
if err != nil {
return err
}
// ...
推荐阅读
- javascript - 基本 Jquery 问题 - 隐藏元素
- appium - 是否可以使用 Appium 对移动应用程序和门户网站进行组合测试?
- css - 为什么媒体查询不申请 max-width 425px?
- cloudsim - 如何计算 CloudSim plus 中请求的 CPU 和 RAM?
- reactjs - 使用 React Hooks 的 useContext
- postgresql - Postgres 面临:错误排序规则不存在。尝试更改排序规则时
- ios - Swift Firebase Facebook 登录 GET 请求应包含明确的“字段”参数
- laravel-5 - VPS Provision 中同一台服务器上的多个 Laravel 项目
- ssl - Nginx ssl_preread 无法处理 SOCKS 5 代理协议
- typo3 - 为 Flexform 中的复选框提供预设(例如通过 fieldControls?)?