分享
  1. 首页
  2. 文章

Go语言 Web开发(6)使用GO连接MySQL数据库操作

小杰的快乐时光 · · 2164 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


我们使用 https://github.com/Go-SQL-Driver/MySQL 作为Go连接MySQL的驱动,进行数据库操作练习。

(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数组切片的长度构造scanArgs、values两个数组,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注入。

参考文章:http://www.01happy.com/golang-mysql-demo/


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:小杰的快乐时光

查看原文:Go语言 Web开发(6)使用GO连接MySQL数据库操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2164 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏