恐慌:sql:扫描中需要 1 个目标参数,而不是 <number>golang、pq、sql

问题描述 投票:0回答:1

我正在使用 db.QueryRow 从

postgresql
中的表中获取列 中的记录。该列的类型为

扫码

m := Message{}
err := db.QueryRow("SELECT data FROM message WHERE data->>'id'=$1"
                    , id).Scan(m.Id, m.Type, m.Title)

结果

恐慌:sql:扫描中预期有 1 个目标参数,而不是 3 个。

根据 row.Scan 可以传递 n 个目标参数。这段代码有什么问题吗?

postgresql go
1个回答
19
投票

查询每行返回一个字段。扫码为三。也许你想要这样的东西:

err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(m.Id, m.Type, m.Title)

此外,将指针传递给值:

err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(&m.Id, &m.Type, &m.Title)

另一种选择是将数据作为单个字段获取,并使用encoding/json 包对结果进行解码。

var p []byte
err := db.QueryRow("SELECT data FROM message WHERE data->>'id'=$1", id).Scan(&p)
if err != nil {
    // handle error
}
var m Message
err := json.Unmarshal(p, &m)
if err != nil {
    // handle error
}
© www.soinside.com 2019 - 2024. All rights reserved.