码迷,mamicode.com
首页 > 数据库 > 详细

Go 操作数据库

时间:2020-06-14 23:49:35      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:sql   str   使用   连接   hub   import   mysq   最大   xid   

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

  

Go 操作数据库

标签:sql   str   使用   连接   hub   import   mysq   最大   xid   

原文地址:https://www.cnblogs.com/sonfer/p/13127563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!