为了账号安全,请及时绑定邮箱和手机立即绑定

从 db.query 读取数据时,除了扫描之外还有其他方法吗?

从 db.query 读取数据时,除了扫描之外还有其他方法吗?

Go
人到中年有点甜 2023-02-21 19:10:59
当我使用扫描时,我必须事先将所有变量写入扫描。我需要一个解决方案,我可以使用像 sprintf 这样的东西来使用数据有没有一种方法可以在不定义变量的情况下访问数据?    func (dbs *item) ReadQuery() {        var (            unit_name, unit_position_name string        )        rows, err := db.Query(dbs.query)        for rows.Next() {            rows.Scan(&unit_name, &unit_position_name)            if err != nil {                log.Fatal(err)            }        }    }例如;row["unit_name"]或者unit_name,unit_position stringval:= fmt.Sprintf("%s , %s",unit_name,unit_position_name)row[val]
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

以下是如何在不显式声明行中值的变量的情况下扫描行。


为值做一个切片。用这些值的地址做一个切片。扫描到地址。


func example(db *sql.DB, query string) {

    rows, err := db.Query(query)

    if err != nil {

        log.Fatal(err)

    }

    cols, err := rows.Columns()

    if err != nil {

        log.Fatal(err)

    }

    addrs := make([]any, len(cols))

    for rows.Next() {

        values := make([]any, len(cols))

        for i := range addrs {

            addrs[i] = &values[i]

        }

        rows.Scan(addrs...)

        if err != nil {

            log.Fatal(err)

        }

        // The variable values contains the row values.

        // Here's an example of how to use the values.  

        // Replace the for loop with your code to

        // process the row.

        for i := range cols {

            fmt.Printf("%s: %v\n", cols[i], values[i])

        }

    }

}


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信