Go 操作数据库

Posted sonfer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:123456@tcp(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
", 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
", err)
		return
	}
	// 如果插入数据的操作,能够拿到插入的id
	id, err := ret.LastInsertId()
	if err != nil {
		fmt.Printf("get id failed,err:%v
", 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
", err)
		return
	}
	// 操作影响的行数
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get id failed, err:%v
", err)
		return
	}A
	fmt.Printf("更新了%d行数据
", 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
", err)
		return
	}
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get id failed, err:%v
", err)
		return
	}
	fmt.Printf("删除了%d行数据
", n)
}
func main() {
	initDB()
	// queryOne(2)
	// queryMore(0)
	// insert()
	// queryOne(4)
	// updateRow(1001, 4)
	// queryOne(4)
	queryMore(0)
	deleteRow(4)
	queryMore(0)
}

  

以上是关于Go 操作数据库的主要内容,如果未能解决你的问题,请参考以下文章

为每个片段添加一个操作栏

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

[Go] 并发和并行的区别

golang代码片段(摘抄)

npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段

VSCode自定义代码片段——git命令操作一个完整流程