这是我参与第五届青训营笔记创作活动的第10天,今天是大年初三,不知道各位有没有坚持在学习呢,今天我将总结一下Go语言中的SQL连接的以及执行相关SQL语句操作,主要使用github.com/go-sql-driver/mysql驱动。
简介
Go官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,
而在Go语言中常用的数据库驱动有如下几种:
- github.com/go-sql-driv…:支持database/sql,全部采用go写。
- github.com/ziutek/mymy…:支持database/sql,也支持自定义的接口,全部采用go写。
- github.com/Philio/GoMy…:不支持database/sql,自定义接口,全部采用go写。
参考:w3cschool
而我今天主要使用go-sql-driver作为驱动。
使用go-sql-driver连接数据库
初始化
- 下载软件包
go mod init moduleName //初始化module
go get -u github.com/go-sql-driver/mysql //使用软件包
- 在项目中引入软件包
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
- 连接数据库
sql.Open()函数用来打开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动
db, err = sql.Open("mysql", "astaxie:astaxie@/test?charset=utf8")
上述语句中,Open函数的第二个语句为DSN(Data Source Name),它是go-sql-driver定义的一些数据库链接和配置信息,其有如下格式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname
- 关闭连接
db.Close()
执行SQL语句
- 执行查询语句
//示例
sqlStatement :=`SELECT * FROM Table WHERE id = ?;`
stmt, err := db.Prepare(sqlStatement) //准备执行
if err != nil {
return fmt.Errorf("init error :%s", err)
}
rows, err := stmt.Query(id) //将id替换占位符”?”并执行查询
if err != nil {
return fmt.Errorf("execute error :%s", err)
}
defer rows.Close() //执行后释放查询
for rows.Next() { //rows.Next()返回bool类型值,代表是否有下一条消息
var u User //自定义结构体
err := rows.Scan(&u.Id, &u.Name) //扫描行并赋值给对应值
}
- 执行插入/删除/修改语句
sqlStatement := sql //使用占位符为?的SQL语句
stmt, err := db.Prepare(sqlStatement)
_, err = stmt.Exec(...)
if err != nil {
return fmt.Errorf("execute error :%s", err)
}
今天的总结到这里就结束了,后面准备再学习一下Gorm的相关知识,之后再进行总结。感谢观看,希望各位在新的一年里也要好好学习知识,争取进入大厂拧螺丝!