Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用。首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动,下载完成之后会在GOPATH下的src/github.com目录下
安装命令: go get github.com/go-sql-driver/mysql
1 打开数据库连接,跟jdbc类似
db,error:=sql.Open("mysql","root:123456@tcp(localhost:3306)/beego?charset=utf8")
defer db.Close()
if error!=nil{
fmt.Println("sql.Open error:",error)
return
}
从前往后依次是 “用户名:密码@tcp(IP:端口)/数据库名?charset=utf8” ,同样的使用之后还是要关闭连接
2 查询操作
func Query(db *sql.DB){
rows,err:=db.Query("select * from user")
if err!=nil{
fmt.Println("db.Query error:",err)
return
}
for rows.Next() {
var id int
var name string
var age int
var address string
var password sql.NullString
//error1:=rows.Scan(&name)
//rows.Columns()
error1 := rows.Scan(&id, &age, &name, &address,&password)
if error1 != nil {
fmt.Println("rows.Scan error:", error1)
return
}
fmt.Printf("id=%d,name=%s,age=%d,address=%s,password=%s\n", id,name,age,address,password.String)
}
}
需要注意的是空值的问题,某个字段有为空的情况,需要声明数据类型为sql.NullString,取得数据后可以赋值给结构体或者变量,具体以实际需要为主
3 插入、修改、删除操作,三种操作都大同小异无非就是sql语句不同,这里已新增为例
func Insert(db *sql.DB,u1 User){
stmt,pError:=db.Prepare("insert into user (age,name,address,password) values (?,?,?,?)")
defer stmt.Close()
if pError!=nil{
fmt.Println("db.Prepare error:",pError)
return
}
res,error:=stmt.Exec(u1.Age,u1.Name,u1.Address,u1.Password)
if error!=nil{
fmt.Println("stmt.Exec error:",error)
return
}
flag,_:=res.RowsAffected()
fmt.Println("受影响的行数:",flag)
}
下面是全部的代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
Name string `db:"name"`
Age int
Address string
Password sql.NullString
}
func Insert(db *sql.DB,u1 User){
stmt,pError:=db.Prepare("insert into user (age,name,address,password) values (?,?,?,?)")
defer stmt.Close()
if pError!=nil{
fmt.Println("db.Prepare error:",pError)
return
}
res,error:=stmt.Exec(u1.Age,u1.Name,u1.Address,u1.Password)
if error!=nil{
fmt.Println("stmt.Exec error:",error)
return
}
flag,_:=res.RowsAffected()
fmt.Println("受影响的行数:",flag)
}
func Query(db *sql.DB){
rows,err:=db.Query("select * from user")
if err!=nil{
fmt.Println("db.Query error:",err)
return
}
for rows.Next() {
var id int
var name string
var age int
var address string
var password sql.NullString
//error1:=rows.Scan(&name)
//rows.Columns()
error1 := rows.Scan(&id, &age, &name, &address,&password)
if error1 != nil {
fmt.Println("rows.Scan error:", error1)
return
}
fmt.Printf("id=%d,name=%s,age=%d,address=%s,password=%s\n", id,name,age,address,password.String)
}
}
func main() {
db,error:=sql.Open("mysql","root:123456@tcp(localhost:3306)/beego?charset=utf8")
defer db.Close()
if error!=nil{
fmt.Println("sql.Open error:",error)
return
}
Query(db)
//Insert(db,User{"周杰伦",28,"上海市徐汇区","654321"})
}