go語言操作mysql數據庫

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



}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章