golang 操作mysql的CRUD

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/raccoon_hzy/article/details/60575918

golang 操作mysql的CRUD


// test2 project main.go
package main

import (
	"container/list"
	"database/sql"
	"fmt"
	"log"
	"strconv"

	_ "github.com/go-sql-driver/mysql" //mysql驱动
)

type customer struct {
	id    string
	pname string
	price float32
	pnum  int
}

func main() {
	ct := customer{"2", "dabao", 123, 23}
	result := updateCustomer(ct)
	//b := insert()
	//query()
	//deleteCustomer("0")
	fmt.Println("mmmmm", result)
}

func getDB() (*sql.DB, error) {
	db, err := sql.Open("mysql", "root:root@tcp(192.168.126.129:8066)/mycatTest?charset-utf-8")
	if err != nil {
		log.Println(err)
		return nil, err
	}
	db.SetMaxOpenConns(30) //设置最大打开的连接数
	db.SetMaxIdleConns(1)  // 设置最大闲置连接数
	db.Ping()
	return db, nil
}

func query() {
	customers := list.New()
	db, err := getDB()
	rows, err := db.Query("select * from deal_product")
	if err != nil {
		log.Println("error-44 : ", err)
	}
	for rows.Next() {
		var id string
		var pname string
		var price float32
		var pnum int
		if err := rows.Scan(&id, &pname, &price, &pnum); err != nil {
			log.Println("error-52 : ", err)
		}
		c := customer{id, pname, price, pnum}
		customers.PushBack(c)
	}
	defer rows.Close()
	defer db.Close()
	for cs := customers.Front(); cs != nil; cs = cs.Next() {
		cu := cs.Value.(customer)
		fmt.Println("custromer : ", cu.id, cu.pname, cu.price, cu.pnum)

	}
}

func insert() (b bool) {
	db, err := getDB()
	db.Begin() // 开启事务
	stm, err := db.Prepare("insert into deal_product(id, pname, price, pnum) values(?, ?, ?, ?)")
	if err != nil {
		log.Println(err)
		return false
	}
	for i := 0; i < 10; i++ {
		stm.Exec(strconv.Itoa(i), "name"+strconv.Itoa(i), i, i)
	}
	stm.Close()
	defer db.Close()
	return true
}

func deleteCustomer(id string) (b bool) {
	db, err := getDB()
	db.Begin()
	stm, err := db.Prepare("delete from deal_product where id = ?")
	if err != nil {
		log.Println("error-86 : ", err)
		return false
	}
	result, err1 := stm.Exec(id)
	if err1 != nil {
		log.Println("error-92", err1)
		return false
	}
	fmt.Println("result: ", result)
	defer stm.Close()
	defer db.Close()
	return true
}

func updateCustomer(c customer) (b bool) {
	db, err := getDB()
	db.Begin()
	stm, err := db.Prepare("update deal_product set pname=?, price=? where id = ?")
	if err != nil {
		log.Println("error-107", err)
		return false
	}
	stm.Exec(c.pname, c.price, c.id)
	if err != nil {
		log.Println("error-112", err)
		return false
	}
	stm.Close()
	db.Close()
	return true
}

猜你喜欢

转载自blog.csdn.net/raccoon_hzy/article/details/60575918