美文网首页
go - 数据库操作

go - 数据库操作

作者: Ismail丶 | 来源:发表于2018-06-13 10:50 被阅读0次

在工作之余需要进行api开发,记录下go学习的中的代码

引入 第三方和系统框架

import (
  "database/sql" // 导入sql
  "fmt" _ "github.com/go-sql-driver/mysql" // 引入mysql 驱动
  //"github.com/widuu/gojson"
  "time"
  "crypto/md5"
  "encoding/hex"
  "strconv"
)

定义结钩体,接口用于连接数据库

//定义结钩体,接口
type MysqlDb struct {
  KKDb *sql.DB  //定义结构体
}

打开数据库操作

//打开数据库
func (f *MysqlDb) KKOpenMysql() bool {
  Odb, err := sql.Open("mysql", KKDbUsername+":"+KKDbPassowrd+"@tcp("+KKDbHostsip+")/"+KKDbname+"?charset=utf8")
  //Odb, err := sql.Open("mysql","root:szy920514@tcp(localhost:3306)/NewPro?charset=utf8")

  if err != nil {
      return false
  }else{
      f.KKDb = Odb
      return true
  }

}

关闭数据库操作

// 关闭数据库
func (f *MysqlDb) KKCloseMysql() { //关闭

  defer f.KKDb.Close()
  fmt.Println("链接数据库成功...........已经关闭")
}

插入一条数据:程序默认打开数据库

/*
插入一条数据:程序默认打开数据库
sqlString:sql语句,注意values?占位符
sqlValues:插入的的值
*/

func (f *MysqlDb)KKInsertValues(sqlString string,sqlValues ...interface{} ) bool {
  //err := f.KKDb.Exec(("INSERT INTO User(age) values (20)"))
   t := f.KKOpenMysql()
  if t ==false {
      return  false
  }

  stmt, stErr := f.KKDb.Prepare(sqlString)
  if stErr == nil {
      _, err := stmt.Exec(sqlValues...)
      if err == nil {
        fmt.Println("数据插入成功!")
        return true
      }else{
        fmt.Println(err)
        fmt.Println("数据插入失败!")
        stmt.Close()
        return false
      }
  }else {
      fmt.Println("stmt 数据插入失败!")
      stmt.Close()
      return  false
  }
}

更新数据:

/*更新数据:

sqlString:sql语句,注意values?占位符
sqlValues:插入的的值
*/

func (f *MysqlDb)KKUpdataValues(sqlString string,sqlValues ...interface{}) bool {

  t := f.KKOpenMysql()
  if t ==false {
      return  false
  }

  stmt, stErr := f.KKDb.Prepare(sqlString)
  if stErr == nil {
      _,err := stmt.Exec(sqlValues ...)
      if err == nil {
        fmt.Println("数据更新成功!")
        stmt.Close()
        return  true
      }else {
        fmt.Println("数据更新失败!")
        stmt.Close()
        return  false
      }
  }else {
      fmt.Println("stmt 数据更新失败!")
      stmt.Close()
      return  true
  }
}

删除一条数据:

/*
删除一条数据:
sqlString:sql语句,注意values?占位符
sqlValues:插入的的值  https://github.com/jmoiron/sqlx 序列化
*/

func (f *MysqlDb)KKDeleteValues(sqlString string,sqlValues ...interface{}) bool {

  t := f.KKOpenMysql()
  if t ==false {
      return  false
  }

  stmt, stErr := f.KKDb.Prepare(sqlString)
  if stErr == nil {
      _,err := stmt.Exec(sqlValues ...)
      if err == nil {
        fmt.Println("数据删除成功!")
        stmt.Close()
        return true
      }else{
        fmt.Println("数据删除失败!")
        stmt.Close()
        return false
      }
  }else {
      fmt.Println("数据删除失败!")
      stmt.Close()
      return false
  }
}

查询数据

//取一行数据,注意这类取出来的结果都是string
func (f *MysqlDb)KKFetchRow( sqlstr string, args ...interface{}) (*map[string]string, error) {
  f.KKOpenMysql()
  stmtOut, err := f.KKDb.Prepare(sqlstr)
  if err != nil {
      panic(err.Error())
  }
  defer stmtOut.Close()
  rows, err := stmtOut.Query(args...)
  if err != nil {
      panic(err.Error())
  }
  columns, err := rows.Columns()
  if err != nil {
      panic(err.Error())
  }
  values := make([]sql.RawBytes, len(columns))
  scanArgs := make([]interface{}, len(values))
  ret := make(map[string]string, len(scanArgs))
  for i := range values {
      scanArgs[i] = &values[i]
  }
  for rows.Next() {
      err = rows.Scan(scanArgs...)
      if err != nil {
        panic(err.Error())
      }
      var value string
      for i, col := range values {
        if col == nil {
            value = "NULL"
        } else {
            value = string(col)
        }
        ret[columns[i]] = value
      }
      break //get the first row only
  }
  return &ret, nil
}

//取多行,注意这类取出来的结果都是string
func (f *MysqlDb)KKFetchRows(sqlstr string, args ...interface{}) (*[]map[string]string, error) {
  f.KKOpenMysql()
  stmtOut, err := f.KKDb.Prepare(sqlstr)
  if err != nil {
      panic(err.Error())
  }
  defer stmtOut.Close()
  rows, err := stmtOut.Query(args...)
  if err != nil {
      panic(err.Error())
  }
  // 数据库字段名字
  columns, err := rows.Columns()
  if err != nil {
      panic(err.Error())
  }
  values := make([]sql.RawBytes, len(columns))
  scanArgs := make([]interface{}, len(values))
  ret := make([]map[string]string, 0)
  for i := range values {
      scanArgs[i] = &values[i]
  }
  for rows.Next() {
      err = rows.Scan(scanArgs...)
      if err != nil {
        panic(err.Error())
      }
      var value string
      vmap := make(map[string]string, len(scanArgs))

      for i, col := range values {
        if col == nil {
            value = "NULL"
        } else {
            value = string(col)
        }
        vmap[columns[i]] = value
      }
      ret = append(ret, vmap)
  }
  return &ret, nil
}

相关文章

  • Go操作MySQL

    Go语言操作MySQL MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。 Go操作...

  • Go操作MySQL

    MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。 Go操作MySQL 连接 Go语...

  • 3.1 Go操作MySQL数据库

    3.1 Go操作MySQL数据库 安装go操作MySQL的驱动go get -u -v github.com/go...

  • Golang数据库操作增删改查

    go 连接mysql进行数据库操作 导入包,导入github那个驱动包是因为go本地的数据库操作需要用到那个驱动 ...

  • 21.连接MySQL

    MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。 go文件不是同一个模块,关闭go...

  • gorose, 最像 laravel's eloquen

    简介 gorose(go orm), 一个小巧强悍的go语言数据库操作orm, 灵感来源于laravel的数据库操...

  • 《go web 编程》第四章 访问数据库:使用 Beego or

    beego orm 是一个 Go 进行 ORM 操作的库,它采用了 Go style 方式对数据库进行操作,实现了...

  • Go操作Mysql数据库

    1. 获取mysql驱动 Go操作数据库文档推荐

  • go - 数据库操作

    在工作之余需要进行api开发,记录下go学习的中的代码 引入 第三方和系统框架 定义结钩体,接口用于连接数据库 打...

  • 19年底36周:Go database/sql库-Go数据库操作

    一、简介 database/sql提供了Go访问和操作SQL数据库的方法。在Go语言中,使用sql.DB使用此类型...

网友评论

      本文标题:go - 数据库操作

      本文链接:https://www.haomeiwen.com/subject/nhxjeftx.html