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