撒的阿坎努斯 发表于 2017-12-11 20:42:43

golang操作mysql使用总结

package main  import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
  )
  type DbWorker struct {
  Dsn      string
  Db       *sql.DB
  UserInfo userTB
  }
  type userTB struct {
  Id   int
  Name sql.NullString
  Agesql.NullInt64
  }
  func main() {
  var err error
  dbw := DbWorker{
  Dsn: "root:123456@tcp(localhost:3306)/sqlx_db?",
  }
  dbw.Db, err = sql.Open("mysql", dbw.Dsn)
  if err != nil {
  panic(err)
  return
  }
  defer dbw.Db.Close()
  dbw.insertData()
  dbw.queryData()
  }
  func (dbw *DbWorker) insertData() {
  stmt, _ := dbw.Db.Prepare(`INSERT INTO user (name, age) VALUES (?, ?)`)
  defer stmt.Close()
  ret, err := stmt.Exec("xys", 23)
  if err != nil {
  fmt.Printf("insert data error: %v\n", err)
  return
  }
  if LastInsertId, err := ret.LastInsertId(); nil == err {
  fmt.Println("LastInsertId:", LastInsertId)
  }
  if RowsAffected, err := ret.RowsAffected(); nil == err {
  fmt.Println("RowsAffected:", RowsAffected)
  }
  }
  func (dbw *DbWorker) QueryDataPre() {
  dbw.UserInfo = userTB{}
  }
  func (dbw *DbWorker) queryData() {
  stmt, _ := dbw.Db.Prepare(`SELECT * From user where age >= ? AND age < ?`)
  defer stmt.Close()
  dbw.QueryDataPre()
  rows, err := stmt.Query(20, 30)
  defer rows.Close()
  if err != nil {
  fmt.Printf("insert data error: %v\n", err)
  return
  }
  for rows.Next() {
  rows.Scan(&dbw.UserInfo.Id, &dbw.UserInfo.Name, &dbw.UserInfo.Age)
  if err != nil {
  fmt.Printf(err.Error())
  continue
  }
  if !dbw.UserInfo.Name.Valid {
  dbw.UserInfo.Name.String = ""
  }
  if !dbw.UserInfo.Age.Valid {
  dbw.UserInfo.Age.Int64 = 0
  }

  fmt.Println("get data,>  }
  err = rows.Err()
  if err != nil {
  fmt.Printf(err.Error())
  }
  }
页: [1]
查看完整版本: golang操作mysql使用总结