安装依赖包
使用Go来操作mysql主要用到两个包
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
第一个包是Go自带的数据库包。但是只有第一个是不够的,数据库有很多种,虽然大同小异,但是还是有区别。这次我们需要使用的是Mysql,所以需要能够驱动Myqsl一个包。
第二个包就是用来Mysql的驱动包,这个包没有在Go的标准库里面,所以需要下载。
可以通过以下指令进行安装:
go get -u github.com/go-sql-driver/mysql
如果以上指令下载不了,可以直接去github.com/go-sql-driver/mysql下载,记得解压安装在(GoPath/src/vendor, 确保和上面的包目录一样,如果不一样记得修改)目录下。
然后需要使用匿名导入,关于匿名包我会在另外一篇博客中更新。
操作数据库
定义一个全局变量db来表示数据库。然后我们分两步进行:
初始化数据库(连接数据库)
// 定义一个全局对象db
var db *sql.DB
// 定义一个初始化数据库的函数,也就是连接数据库
func initDB() (err error) {
// DSN:Data Source Name
//dsn := "user:password@tcp(127.0.0.1:3306)/dbname" // 一般语句
dsn := "root:123456@tcp(127.0.0.1:3306)/runoob" // 这是我电脑上的数据库,请根据实际情况自行修改
// 不会校验账号密码是否正确
// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db
db, err = sql.Open("mysql", dsn)
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
操作数据库:
func main() {
err := initDB() // 调用输出化数据库的函数
if err != nil {
fmt.Printf("init db failed,err:%v\n", err)
return
}
// 将runoob1_tb1 这个表中的数据全部读出来
rows, err := db.Query("SELECT * FROM runoob_tb1")
// 也可以使用条件选择
//id := 2
//rows, err := db.Query("SELECT * FROM runoob_tb1 WHERE id=?", id) //
//
if err != nil {
log.Fatalln(err)
}
defer rows.Close()
for rows.Next() {
// 取多少个变量就定义多少个变量
var id int
var author string
var title string
var date string
if err := rows.Scan(&id, &title, &author, &date); err != nil {
log.Fatalln(err)
}
fmt.Println(id, title, author, date)
}
if err := rows.Err(); err != nil {
log.Fatalln(err)
}
}
运行结果
D:\编程语言和环境\Go\src\studygo\day07\mysql\demo1>go run main.go
1 学习PHP 菜鸡教程 2020-02-13
2 学习MYSQL 菜鸟教程 2020-02-13
3 学习JAVA RUNOOB.COM 2020-02-13
5 学习C++ RUNOOB.COM 2020-02-13
7 学习go kyda 2020-02-16
看下控制台的结果:
很好一样,说明我们操作成功了。其他的一些操作其实大同小异。只需在上面程序上稍作修改即可。
本文主要参考:https://www.liwenzhou.com/posts/Go/go_mysql/
撩我?
我的公众号:Kyda