博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go-sql-driver包 实现mysql不定字段查询
阅读量:7094 次
发布时间:2019-06-28

本文共 1276 字,大约阅读时间需要 4 分钟。

go-sql-driver包是一个第三方包 下载地址 下面直接上代码

package mainimport (	"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  我做了注释,这样容易看懂点

转载于:https://my.oschina.net/tongjh/blog/333050

你可能感兴趣的文章
VM virtuaBox异常关机启动不了的解决方案
查看>>
简单的DropDownButton(Winform)
查看>>
按行拆分文本文件与合并文本文件---I/O流---java
查看>>
offsetLeft,Left,clientLeft的区别
查看>>
PaaS
查看>>
开源网络应用框架 Rails
查看>>
云平台厂商系列集
查看>>
parseInt()详解
查看>>
将阿拉伯数字转为中文大写读法
查看>>
bzoj 1493 暴力
查看>>
将std::string当字节流使
查看>>
Thrift编译错误('::malloc' has not been declared)
查看>>
PHP5中使用PDO连接数据库的方法
查看>>
Springboot 使用thymeleaf模板layout布局
查看>>
21 行为型模式-----状态模式
查看>>
VM 设置windows与Ubuntu 共享文件
查看>>
JSP(基础语法)
查看>>
Linux/Unix select函数 及select/poll与epoll的对比
查看>>
多线程并发简单版
查看>>
《Python核心编程》第二版第六章练习题答案-第三部分
查看>>