go-sql-driver包 实现mysql不定字段查询
go-sql-driver包是一个第三方包 下载地址http://github.com/go-sql-driver/mysql 下面直接上代码
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { //连接数据库 db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/go?charset=utf8") if err != nil { fmt.Println("连接数据库失败", err.Error()) return } defer db.Close() //查询数据库 query, err := db.Query("select * from go_user") if err != nil { fmt.Println("查询数据库失败", err.Error()) return } defer query.Close() //读出查询出的列字段名 cols, _ := query.Columns() //values是每个列的值,这里获取到byte里 values := make([][]byte, len(cols)) //query.Scan的参数,因为每次查询出来的列是不定长的,用len(cols)定住当次查询的长度 scans := make([]interface{}, len(cols)) //让每一行数据都填充到[][]byte里面 for i := range values { scans[i] = &values[i] } //最后得到的map results := make(map[int]map[string]string) i := 0 for query.Next() { //循环,让游标往下推 if err := query.Scan(scans...); err != nil { //query.Scan查询出来的不定长值放到scans[i] = &values[i],也就是每行都放在values里 fmt.Println(err) return } row := make(map[string]string) //每行数据 for k, v := range values { //每行数据是放在values里面,现在把它挪到row里 key := cols[k] row[key] = string(v) } results[i] = row //装入结果集中 i++ } //查询出来的数组 for k, v := range results { fmt.Println(k, v) } db.Close() //用完关闭 }
注:原创者是 http://www.du52.com/text.php?id=562 我做了注释,这样容易看懂点
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。