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



}

 

你可能感兴趣的:(go语言操作mysql数据库)