我在下面的代码中遇到了上述问题
stmt, err2 := db.Prepare( "SELECT COUNT(*) FROM xyz WHERE product_id=? and chart_number=?")
rows, err2 := stmt.Query( bidStatusReqVal.ProductId,bidStatusReqVal.ChartNumber).Scan(&count)
我在下面的代码中遇到了上述问题
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
}
// ...