我正在写一个通用代码来查询任何RDS表中的数据。我已经经历了许多StackOverflow的答案,但没有一个对我有效。我已经通过了以下链接:-
- panic: sql: expected 1 destination arguments in Scan, not golang, pq, sql
- 如何使用Golang SDK查询RDS的任何表
我的第一个代码是
package main
import (
"fmt"
)
type BA_Client struct {
ClientId int `json:ClientId;"`
CompanyName string `json:CompanyName;"`
CreateDate string `json:CreateDate;"`
}
func main() {
conn, _ := getConnection() // Det database connection
query := `select * from IMBookingApp.dbo.BA_Client
ORDER BY
ClientId ASC
OFFSET 56 ROWS
FETCH NEXT 10 ROWS ONLY ;`
var p []byte
err := conn.QueryRow(query).Scan(&p)
if err != nil {
fmt.Println("Error1", err)
}
fmt.Println("Data:", p)
var m BA_Client
err = json.Unmarshal(p, &m)
if err != nil {
fmt.Println("Error2", err)
}
}
我的第二个代码是
conn, _ := getConnection()
query := `select * from IMBookingApp.dbo.BA_Client__c
ORDER BY
ClientId__c ASC
OFFSET 56 ROWS
FETCH NEXT 10 ROWS ONLY ;`
rows, err := conn.Query(query)
if err != nil {
fmt.Println("Error:")
log.Fatal(err)
}
println("rows", rows)
defer rows.Close()
columns, err := rows.Columns()
fmt.Println("columns", columns)
if err != nil {
panic(err)
}
for rows.Next() {
receiver := make([]*string, len(columns))
err := rows.Scan(&receiver )
if err != nil {
fmt.Println("Error reading rows: " + err.Error())
}
fmt.Println("Data:", p)
fmt.Println("receiver", receiver)
}
使用这两个代码,我得到了如下相同的错误
sql: expected 3 destination arguments in Scan, not 1
可能是因为我使用的是SQL Server而不是MySQL吗?如果有人能帮助我找到这个问题,我将不胜感激。
3条答案
按热度按时间iih3973s1#
当您想要使用输入切片进行行扫描时,请使用可变3点表示法
...
将切片转换为单个参数,如下所示:使用变量参数的列(本例中为三列)将有效地扩展为:
编辑:
SQL扫描方法参数值的类型必须为
interface{}
。因此,我们需要一个中间切片。例如:isr3a4wc2#
对于第二个示例,请尝试以下操作(接收方前面没有&符号):
receiver
和*string
已经是一个引用类型,不需要再添加引用。bnl4lu3b3#
特定字段表
更改为