go CRUD

go CRUD

database/sql中的DB结构体有相应的方法,分别是Exec、Query和QueryRow。

go中没有delphi的数据集,它是基于数据结构体(对应在delphi中是record),基于数据结构体也叫做基于data-model序列和还原。

首先是连接数据库。

func Init() {
	Db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/test")
	if err != nil {
		fmt.Println("sql.Open err", err)
	}
}

QueryRow(),查询一行结果

func (u *User) GetUserById(name string) (*User, error) {
	Init()
	sqlStr := "SELECT username, PASSWORD,email  FROM users WHERE username=?"
	row := Db.QueryRow(sqlStr, name)
	var username string
	var password string
	var email string
	err := row.Scan(&username, &password, &email)
	if err != nil {
		fmt.Println("row.Scan", err)
		return nil, err
	}
	user := &User{
		Username: username,
		Password: password,
		Email:    email,
	}
	return user, err
}

 Query(),查询多行结果

func (u *User) GetUsers() ([]*User, error) {
	Init()
	sqlStr := "SELECT *  FROM users "
	rows, err := Db.Query(sqlStr)

	if err != nil {
		fmt.Println(" Db.Query err", err)
		return nil, err
	}
	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 {
			fmt.Println("rows.Scan(&id,&username,&password,&email)", err)
			return nil, err
		}
		user := &User{
			Id:       id,
			Username: username,
			Password: password,
			Email:    email,
		}

		users = append(users, user)
	}
	return users, err
}

  

 Exec(),执行事务性SQL,不返回结果 

func (u *User) AddUser() error {
	Init()
	sqlStr := "insert into users(username,password,email) values(?,?,?)"
	_, err := Db.Exec(sqlStr, u.Username, u.Password, u.Email)

	if err != nil {
		fmt.Println("Db.Exec", err)
	}
	return nil
}

  

  

 

posted @ 2022-06-06 10:38  delphi中间件  阅读(120)  评论(0编辑  收藏  举报