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
}
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16347353.html

浙公网安备 33010602011771号