培训首页  >  web前端新闻  >  兄弟连Go语言连接MySQL数据库操作

兄弟连Go语言连接MySQL数据库操作

[2018-08-23 14:10:24] 浏览量:251 来源:

北京兄弟连IT

  2018年时已过半,在今年的区块链热潮中,国内各家科技巨头均已粉墨登场,开始在这个新兴领域里抢占高地。但在具体布局细节上,几大巨头又各有不同,从中亦可窥见它们各自对区块链的重视程度和期许方向。

 

  兄弟连Go语言全栈与区块链技术培训课程是由清华、微软和谷歌名师历时半年时间研发出的独一无二的体系化课程。课程涵盖9大学习阶段,及多个企业级项目实战和来自世界顶尖区块链比赛作品,并由以微软区块链最具价值专家尹成为代表的清华系区块链团队亲临授课,综合提升学员的职场竞争力。

 

1)导入数据库驱动

 

import (

   _"github.com/Go-SQL-Driver/MySQL"

)

这里使用 _ 的意思是引入后面的包名而不直接使用这个包中定义的函数,变量等资源。若出现无法导入的情况,我们可以使用以下方式解决(以 window系统为例)

 

windows+R 打开cmd

输入go get github.com/vmihailenco/redis ,

回车之后会自动下载项目到GOPATH中的src目录下,然后刷新IDE

2)数据库连接

使用 sql.Open 用来打开一个注册过的数据库驱动,这里有几种连接方式,如下所示,一般我们选用第二种方式

 

user@unix(/path/to/socket)/dbname?charset=utf8

user:password@tcp(localhost:3306)/dbname?charset=utf8

user:password@/dbname

user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

3)增删改查操作

 

package main

 

import (

   "database/sql"

   "fmt"

   _"github.com/Go-SQL-Driver/MySQL"

)

 

var(

   DBHostsIp  = "localhost:3306"

   DBUserName = "root"

   DBPassWord = "123456"

   DBName     = "localmysql"

)

 

func main(){

   //连接至数据库

   db,err := sql.Open("mysql", DBUserName+":"+DBPassWord+"@tcp("+DBHostsIp+")/"+DBName)

   CheckErr(err)

   insert(db)

   //关闭数据库连接

   db.Close()

}

//插入demo

func insert(db *sql.DB)  {

   //准备插入操作

   stmt,err := db.Prepare("INSERT user (user_name,user_age,user_sex) values (?,?,?)")

   CheckErr(err)

   //执行插入操作

   res,err := stmt.Exec("limao",26,2)

   CheckErr(err)

   //返回最近的自增主键id

   id,err := res.LastInsertId()

   fmt.Println("LastInsertId: ",id)

}

//查询demo

func query(db *sql.DB)  {

   //rows:返回查询操作的结果集

   rows,err := db.Query("SELECT * FROM user")

   CheckErr(err)

   //第一步:接收在数据库表查询到的字段名,返回的是一个string数组切片

   columns, _ := rows.Columns() // columns:  [user_id user_name user_age user_sex]

   //根据string数组切片的长度构造scanArgsvalues两个数组,scanArgs的每个值指向values相应值的地址

   scanArgs := make([]interface{}, len(columns))

   values := make([]interface{}, len(columns))

   for i := range values {

      scanArgs[i] = &values[i]

   }

   for rows.Next() {

      //将查询到的字段名的地址复制到scanArgs数组中

      err = rows.Scan(scanArgs...)

      CheckErr(err)

      //将行数据保存到record字典

      record := make(map[string]string)

      for i, col := range values {

         if col != nil {

            //字段名 字段信息

            record[columns[i]] = string(col.([]byte))

         }

      }

      fmt.Println(record)

   }

}

//更新demo

func update(db *sql.DB)  {

   //准备更新操作

   stmt1,err := db.Prepare("UPDATE user SET user_age=?,user_sex=? WHERE user_id=?")

   CheckErr(err)

   //执行更新操作

   res1, err := stmt1.Exec(21, 2, 1)

   CheckErr(err)

   //查询更新多少条信息

   num, err := res1.RowsAffected()

   CheckErr(err)

   fmt.Println(num)

}

//删除demo

func remove(db *sql.DB)  {

   //准备删除操作

   stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)

   CheckErr(err)

   //执行删除操作

   res, err := stmt.Exec(1)

   CheckErr(err)

   //查询删除多少条信息

   num, err := res.RowsAffected()

   CheckErr(err)

   fmt.Println(num)

}

 

//检查错误信息

func CheckErr(err error)  {

   if err != nil {

      panic(err)

   }

}

总结:

db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态。

db.Query()函数用来直接执行Sql返回Rows结果。

stmt.Exec()函数用来执行stmt准备好的SQL语句。

我们可以看到我们传入的参数都是=?对应的数据,这样做的方式可以一定程度上防止SQL注入。

高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!

原价1188元的12节区块链进阶课程,现仅需1元!

还可免费领取《Go语言基础实战项目开发》与《Go语言高级实战项目开发》教材两本!!

限时限量!!先到先得!!

http://www.ydma.cn/open/course/24

 

关注兄弟连区块链技术公众号领取更多技术干货哦!!!



文中图片素材来源网络,如有侵权请联系删除
  • 软件开发
  • 软件测试
  • 数据库
  • Web前端
  • 大数据
  • 人工智能
  • 零基础
  • 有HTML基础
  • 有PHP基础
  • 有C语言基础
  • 有JAVA基础
  • 其他计算机语言基础
  • 周末班
  • 全日制白班
  • 随到随学

网上报名

热门信息