前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >golang 访问 db 异常案例

golang 访问 db 异常案例

作者头像
用户1278550
发布2022-01-27 14:36:59
发布2022-01-27 14:36:59
61600
代码可运行
举报
文章被收录于专栏:idbaidba
运行总次数:0
代码可运行

使用golang 访问数据库遇到的异常 ,专家绕行

在测试多个编程语音访问数据库的脚本。使用golang 查询数据后,获取内容出错问题

panic: sql: expected 2 destination arguments in Scan, not 1

select 函数如下:

代码语言:javascript
代码运行次数:0
运行
复制
func sqlSelect() {
    //
    rows, err := db.Query("SELECT * FROM test1")
    checkErr(err)

    for rows.Next() {
        var a int
        err = rows.Scan(&a)
        checkErr(err)
        fmt.Println("a = ",a)
    }
}

实际上 go_tab 里面有两个字段 ,查询函数封装的时候只是展示其中一个,select * 会产生2列数据。

解决方式一

代码语言:javascript
代码运行次数:0
运行
复制
    for rows.Next() {
        var a int
      var b int
        err = rows.Scan(&a,&b)
        if err != nil {
        log.Fatalln(err)
      }
        fmt.Println("a = ", a,"b = ", b )
    }

解决方式二

如果字段比较多,有不想硬编码,可以使用下面的方式

代码语言:javascript
代码运行次数:0
运行
复制
func sqlSelect() {
    rows, err := db.Query("select * from poc_tab")
    if err != nil {
        log.Fatalln(err)
    }
      // 获取字段
    cols, _ := rows.Columns()
    for i := range cols {
        fmt.Print(cols[i])
        fmt.Print("\t")
    }

    fmt.Println("\n==========================")
    values := make([]sql.RawBytes, len(cols))
    scans := make([]interface{}, len(cols))

    for i := range values {
        scans[i] = &values[i]
    }

    results := make(map[int]map[string]string)
    i := 0
    for rows.Next() {
        if err := rows.Scan(scans...); err != nil {
            fmt.Println("Error")
            return
        }

        row := make(map[string]string)
        for j, v := range values {
            key := cols[j]
            row[key] = string(v)
        }
        results[i] = row
        i++
    }
    for i, m := range results {
        fmt.Println(i)
        for k, v := range m {
            fmt.Println(k, " : ", v)
        }
        fmt.Println("========================")
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档