Go学习:操作MySQL数据库(1)
操作 MySQL 数据库
使用 Go 操作 MySQL 等数据库,一般有两种方式:
- 一是利用 database/sql 接口,直接在代码里硬编码 sql 语句;
- 二是使用 ORM,具体一点是 GORM,以对象关系映射的方式在抽象地操作数据库。
这里先尝试第一种
连接 Mysql
安装驱动 go get github.com/go-sql-driver/mysql
导入驱动
package main
import (
_ "github.com/go-sql-driver/mysql"
)
.
.
.
建立连接
var db *sql.DB
func main() {
var err error
config := mysql.Config{
User: "root",
Passwd: "root",
Addr: "127.0.0.1:3306",
Net: "tcp",
DBName: "test",
AllowNativePasswords: true,
}
// 准备数据库连接池
db, err = sql.Open("mysql", config.FormatDSN())
if err != nil {
fmt.Print(err)
}
// 设置最大连接数
db.SetMaxOpenConns(25)
// 设置最大空闲连接数
db.SetMaxIdleConns(25)
// 设置每个链接的过期时间
db.SetConnMaxLifetime(5 * time.Minute)
// 尝试连接,失败会报错
err = db.Ping()
if err != nil {
fmt.Print(nil)
}
}
需要注意的是,创建DB对象成功,并不代表已经成功的连接了数据库,数据库连接只有在真正需要的时候才会被创建。因此如果,在创建DB对象后想验证数据库连接是否有效,可以调用Ping()
基本操作 curd
//查询
var ID int
var name, email string
id := 1
query := "SELECT id,name,email FROM users WHERE id = ?"
e := db.QueryRow(query, id).Scan(&ID, &name, &email)
if e != nil {
panic(e)
}
fmt.Println(ID)
fmt.Println(name)
fmt.Println(email)
//新增
stmt, e1 := db.Prepare("INSERT users SET name=?,email=?")
checkErr(e1)
res, e2 := stmt.Exec("zhang", "11@ww")
checkErr(e2)
fmt.Print(res)
//修改
stmt, err = db.Prepare("update users set name=? where id=?")
checkErr(err)
res, err = stmt.Exec("zhang", id)
checkErr(err)
fmt.Print(res)
//删除
stmt, err = db.Prepare("delete from users where id=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
本作品采用《CC 协议》,转载必须注明作者和本文链接