Go 操作数据库

package main

import (
	"database/sql"
	"fmt"

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

// 定义表字段
type user struct {
	id   int
	name string
	age  int
}

var db *sql.DB

// 初始化函数
func initDB() (err error) {

	dsn := "root:(122.51.115.136:3306)/sql_test"
	// 初始化不能使用 := 因为要使用全局定义的db
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		return
	}
	err = db.Ping()
	if err != nil {
		return
	}
	// 设置数据库最大连接数
	db.SetMaxOpenConns(10)
	// 设置最大空闲连接数
	db.SetMaxIdleConns(5)
	return
}

// 查询单行A
func queryOne(n int) {
	// initDB()
	var u1 user

	sqlStr := `select id,name,age from user where id=?`
	db.QueryRow(sqlStr, n).Scan(&u1.id, &u1.name, &u1.age)

	fmt.Println(u1)
}

// 查询多行
func queryMore(n int) {
	// initDB()
	sqlStr := `select id,name,age from user where id > ?`
	rowsObj, err := db.Query(sqlStr, n)
	if err != nil {
		fmt.Printf("exec %s query failed,err:%v", sqlStr, err)
		return
	}
	defer rowsObj.Close()

	for rowsObj.Next() {
		var u user
		err := rowsObj.Scan(&u.id, &u.name, &u.age)
		if err != nil {
			fmt.Printf("scan failed, err:%v\n", err)
		}
		fmt.Println(u)
	}
}

// 插入数据
func insert() {
	sqlStr := `insert into user(name,age) values("李阳",31)`
	// 执行语句A
	ret, err := db.Exec(sqlStr)
	if err != nil {
		fmt.Printf("insert failed,err:%v\n", err)
		return
	}
	// 如果插入数据的操作,能够拿到插入的id
	id, err := ret.LastInsertId()
	if err != nil {
		fmt.Printf("get id failed,err:%v\n", err)
	}
	fmt.Println("id:", id)

}

// 更新数据
func updateRow(newAge int, id int) {
	sqlStr := `update user set age=? where id=?`
	ret, err := db.Exec(sqlStr, newAge, id)
	if err != nil {
		fmt.Printf("update failed,err:%v\n", err)
		return
	}
	// 操作影响的行数
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get id failed, err:%v\n", err)
		return
	}A
	fmt.Printf("更新了%d行数据\n", n)
}

// 删除数据
func deleteRow(id int) {
	sqlStr := `delete from user where id=?`
	ret, err := db.Exec(sqlStr, id)
	if err != nil {
		fmt.Printf("delete failed,err:%v\n", err)
		return
	}
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get id failed, err:%v\n", err)
		return
	}
	fmt.Printf("删除了%d行数据\n", n)
}
func main() {
	initDB()
	// queryOne(2)
	// queryMore(0)
	// insert()
	// queryOne(4)
	// updateRow(1001, 4)
	// queryOne(4)
	queryMore(0)
	deleteRow(4)
	queryMore(0)
}

相关推荐