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"})
}