Go增删改查 ——mysql

2023年1月23日10:56:49

scan函数讲解
我们怎样读取用户从键盘(控制台)输入的数据?输入指从键盘或其它标准输入(os.Stdin)读取数据。最简单的方法是使用fmt包里的Scan-或Sscan-系列函数

scan函数会识别空格左右的内容,哪怕换行符号存在也不会影响scan对内容的获取
scanln函数会识别空格左右的内容,但是一旦遇到换行符就会立即结束,不论后续还是否存在需要带输入的内容。

操作数据库

1.导包并连接

import (
"database/sql"
"fmt"
_ "github.com/Go-SQL-Driver/MySQL"

)

db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
if err != nil{
	fmt.Printf("connect mysql fail ! [%s]",err)
}else{
	fmt.Println("connect to mysql success")
}

2.增加

result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8")
if err != nil{
	fmt.Println("insert failed,",err)
}
userId,err:= result.LastInsertId()
rowCount,err:=result.RowsAffected()  //影响行
fmt.Println("user_id:",userId)
fmt.Println("rowCount:",rowCount)

3.查询
// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。
// Scanln 和 Scan 类似,scan遇到换行当做空格,scanln遇到换行符就停止扫描。

rowsQuery,err := db.Query("SELECT * FROM person WHERE height=7")
if err != nil{
	fmt.Println("select db failed,err:",err)
	return
}
for rowsQuery.Next() {
	var height int
	var head  string
	var address  string
	err = rowsQuery.Scan(&head,&height,&address)// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(height,address,head)
}
rowsQuery.Close()
}

4删除

rowsDelete,err:=db.Exec("DELETE FROM person WHERE height=3")

5改

rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE height=7")

代码附录

	package main

	import (
	"database/sql"
	"fmt"
	_ "github.com/Go-SQL-Driver/MySQL"
)
		func main()  {
	/*	db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/person?charset=utf8")*/
		db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
		if err != nil{
			fmt.Printf("connect mysql fail ! [%s]",err)
		}else{
			fmt.Println("connect to mysql success")
		}
		/*result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8")
		if err != nil{
			fmt.Println("insert failed,",err)
		}
		userId,err:= result.LastInsertId()
		rowCount,err:=result.RowsAffected()
		fmt.Println("user_id:",userId)
		fmt.Println("rowCount:",rowCount)*/
	
	
	
		/*rowsQuery,err := db.Query("SELECT * FROM person WHERE height=7")
		if err != nil{
			fmt.Println("select db failed,err:",err)
			return
		}
		for rowsQuery.Next() {
			var height int
			var head  string
			var address  string
			err = rowsQuery.Scan(&head,&height,&address)
			if err != nil {
				fmt.Println(err)
				return
			}
			fmt.Println(height,address,head)
		}
		rowsQuery.Close()*/
	
	/*	rowsDelete,err:=db.Exec("DELETE FROM person WHERE height=3")
	
		fmt.Println(rowsDelete.LastInsertId())*/
	
		rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE height=7")
		fmt.Print(
			rowsUpdate.LastInsertId())
	}

postman发送POST请求往数据库增加数据
mysql.go

	import (
"database/sql"
"log"
_ "github.com/Go-SQL-Driver/MySQL"
)

type User struct {
	Id       int    `json:"id" form:"id"`
	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
}

func DBConn()(db *sql.DB) {
	dbDriver := "mysql"
	dbUser := "root"
	dbPass := "123456"
	dbName := "test"
	db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)
	if err != nil { panic(err.Error()) }
	return db }
		func add(user User) (Id int, err error) {

	//1.操作数据库
	db:=DBConn()
	//推迟数据库连接的关闭
	defer db.Close()
	stmt, err := db.Prepare("INSERT INTO person(id,username, password) VALUES (?,?, ?)")
	if err
//将id类型转换
		Id = int(id)
		defer stmt.Close()
		return

main.go

router.POST("/add", func(c *gin.Context) {
	var  u User
	err := c.Bind(&u)
	if err != nil {
		log.Fatal(err)
	}
	Id, err := add(u)
	fmt.Print("id=", Id)
	c.JSON(http.StatusOK, gin.H{
		"message": fmt.Sprintf("%s 插入成功", u.Username),
	})
})

Go增删改查 ——mysql

  • 作者:小白求带528
  • 原文链接:https://blog.csdn.net/weixin_42123182/article/details/89318991
    更新时间:2023年1月23日10:56:49 ,共 3167 字。