我用的github.com/go-sql-driver/mysql这个驱动,我像下面这样写没有报错,但是里面的数据为空或者0
type data struct {
id int
name string
weight int
}
rows, _ := db.Query("select * from test where id = ?", 2)
for rows.Next() {
line := data{}
err = rows.Scan(&line)
log.Println(line)
}
运行结果
2017/07/17 13:37:50 {0 0}
存到map的代码
rows, _ := db.Query("select * from test where id = ?", 2)
columns, _ := rows.Columns()
length := len(columns)
for rows.Next() {
value := make([]interface{}, length)
columnPointers := make([]interface{}, length)
for i:=0;i
columnPointers[i] = &value[i]
}
rows.Scan(columnPointers...)
data := make(map[string]interface{})
for i:=0;i
columnName := columns[i]
columnValue := columnPointers[i].(*interface{})
data[columnName] = *columnValue
}
log.Print(data)
}
有效果,但是看不懂为何要这样写
回答
你的应该报错了,你把err打出来看
就你的代码,你不能这么scan, 你应该 rows.Scan(&line.id, &line.name, &line.weight)
sqlmapper: https://github.com/arthas29/s…非常轻量,一个go文件就搞定
原理就是用go的反射,这样就不用去写sql字符串了,很方便
package main
import (
"fmt"
"github.com/bobby96333/goSqlHelper"
)
func main(){
fmt.Println("hello")
conn,err :=goSqlHelper.MysqlOpen("user:[email protected](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)
}
}
output:
&map[col1:abc col2:123]
逻辑很清楚,见注释吧rows转map