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

GO:从 SQL 查询返回地图

GO:从 SQL 查询返回地图

Go
长风秋雁 2021-12-06 16:43:05
我正在 GO 函数中查询 mysql 数据库,并想在映射中返回键值对,但无法弄清楚如何完成此操作。到目前为止,我有这个功能:func GetData(callIds []string) map[string]Records {    //db insert    db, err := sql.Open("mysql", mySql)    if err != nil {        fmt.Printf(err.Error())    }    defer db.Close()    //db query    var foo string    err = db.QueryRow("select foo from bardata where callId = %v", 1).Scan(&foo)    if err != nil {        fmt.Printf(err.Error())    }    fmt.Println(foo)    return nil我想为查询返回的每一行返回一个键callId和值的映射foo。
查看完整描述

2 回答

?
凤凰求蛊

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

首先,您需要建立您的查询。实际上,您甚至没有使用函数输入。由于我们有可变数量的参数,我们需要做一些工作来构造正确数量的占位符:


query := `select callid, foo from bardata where callid in (` +

    strings.Repeat(`?,`, len(callIds) - 1) + `?)`

然后,使用传入的值执行:


rows, err := db.Query(query, callIds...)

if err != nil {

    // handle it

}

defer rows.Close()

然后收集结果:


ret := map[string]string{}

for rows.Next() {

    var callid, foo string

    err = rows.Scan(&callid, &foo)

    if err != nil {

        // handle it

    }

    ret[callid] = foo

}


return ret

注意事项:

  1. 如果callIds是空切片,这将导致占位符不匹配错误。如果可能,那么您需要检测它并单独处理它(可能通过返回错误或空映射 - 不需要查询数据库)。

  2. 这将返回一个map[string]string值是“foo”的任何值。在您的问题中,您有返回 a 的函数,map[string]Records但没有关于 aRecords可能是什么或如何获取a 的信息。

  3. 您可能希望以sql.ErrNoRows与其他错误不同的方式处理。


查看完整回答
反对 回复 2021-12-06
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

package main


import (

    "fmt"

    "github.com/bobby96333/goSqlHelper"

)


func main(){

    fmt.Println("hello")

    conn,err :=goSqlHelper.MysqlOpen("user:password@tcp(127.0.0.1:3306)/dbname")

    checkErr(err)

    row,err := conn.QueryRow("select * from table where col1 = ? and  col2 = ?","123","abc")

    checkErr(err)

    if *row==nil {

        fmt.Println("no found row")

    }else{

        fmt.Printf("%+v",row)

    }

}


func checkErr(err error){

    if err!=nil {

        panic(err)

    }

}

输出:


&map[col1:abc col2:123]


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

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