全栈编程

Balance $ 2,317
Item Sold 1230
文章作者: 全栈编程@luboke.com
版权声明: 本文章为全栈编程go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!

go语言中操作数据库

使用database/sql包
由于Go官方没有提供数据库的驱动,所以需要导入第三方的驱动包go-sql-driver
对数据库操作需要用到的方法:
  1. Prepare方法(DB结构中的方法),预编译操作
  2. Exec方法(DB结构或者Stmt结构中的方法),执行增删改操作
//向 users 表中插入一条记录
//创建 user.go 文件,文件中编写一下代码
//Prepare方法(DB结构中的方法),预编译操作
//Exec方法(DB结构或者Stmt结构中的方法),执行增删改操作

//User 结构体
type User struct {
	ID int
	Username string
	Password string
	Email string
}

//AddUser 添加User的方法一
func (user *User) AddUser() error {
	//1.fmt.scan.限流处理.写sql语句
	sqlStr := "insert into admin_users(username,password,email) values(?,?,?)"
	//2.限流处理【未搞懂】.预编译
	inStmt, err := Db.Prepare(sqlStr)
	if err != nil {
		fmt.Println("预编译出现异常:", err)
		return err
	}
	//3.buffered channel实例【不讲】.执行
	_, err2 := inStmt.Exec(user.Username, user.Password, user.Email)
	if err2 != nil {
		fmt.Println("执行出现异常:", err2)
		return err
	}
	return nil
}

//AddUser2 添加User的方法二
func (user *User) AddUser2() error {
	//1.fmt.scan.限流处理.写sql语句
	sqlStr := "insert into admin_users(username,password,email) values(?,?,?)"
	//2.限流处理【未搞懂】.执行
	_, err := Db.Exec(sqlStr, user.Username, user.Password, user.Email)
	if err != nil {
		fmt.Println("执行出现异常:", err)
		return err
	}
	return nil
}


//获取一条记录
//根据用户的 id 从数据库中获取一条记录
//
//QueryRow方法(DB结构或者Stmt结构中的方法)
//执行查询一行操作
//返回Row结构类型

//GetUserByID 根据用户的id从数据库中查询一条记录
func (user *User) GetUserByID() (*User, error) {
	//写sql语句
	sqlStr := "select id,username,password,email from admin_users where id = ?"
	//执行
	row := Db.QueryRow(sqlStr, user.ID)
	//声明
	var id int
	var username string
	var password string
	var email string
	err := row.Scan(&id, &username, &password, &email)
	if err != nil {
		return nil, err
	}
	u := &User{
		ID: id,
		Username: username,
		Password: password,
		Email: email,
	}
	return u, nil
}

//从数据库中查询出所有的记录
//GetUsers 获取数据库中所有的记录
func (user *User) GetUsers() ([]*User, error) {
	//写sql语句
	sqlStr := "select id,username,password,email from admin_users"

	//执行
	rows, err := Db.Query(sqlStr)
	if err != nil {
		return nil, err
	}

	//创建User切片
	var users []*User

	//遍历
	for rows.Next() {
		//声明四个个变量
		var id int
		var username string
		var password string
		var email string
		//将各个字段中的值读到以上三个变量中
		err := rows.Scan(&id, &username, &password, &email)
		if err != nil {
			return nil, err
		}
		//将三个变量的值赋给 User 结构体
		u := &User{
			ID: id,
			Username: username,
			Password: password,
			Email: email,
		}
		//将 u 添加到 users 切片中
		users = append(users, u)
	}
	return users, nil
}
文章作者: 全栈编程@luboke.com
版权声明: 本文章为全栈编程go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!
copyright © 2020 全栈编程@luboke.com