Go操作数据库
安装包
go get github.com/go-sql-driver/mysql
导入包
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
连接数据库
db, err := sql.Open(“mysql”, “用户名:密码@tcp(ip:端口)/数据库名字?charset=utf8”)
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8",
dbUser, dbPass, dbHost, dbName))
if err != nil {
return nil, err
}
// 执行open函数并不会获得数据库连接的有效性,通常需要Ping()来进行
err = db.Ping()
if err != nil {
return nil, err
}
db.SetMaxIdleConns(maxIdle) //设置最大连接数
db.SetMaxOpenConns(maxConn) //设置最大闲置连接数
关闭数据库
db.close()
增删改
方法一:
stmt,err :=db.Prepare("")
if err != nil {
Logger.Println(" err:", err)
return
}
res, err := stmt.Exec(位置, "参数")
方法二:
res, err := stmt.Exec("sql语句", 参数列表)
获取刚刚添加的ID
id,err := res.LastInsertId()
获取影响行数
affect,err := res.RowAffected()
查询
mv := "select * from tablename " +
"where ..."
rows, err := db.Query(mv,value)
if err != nil {
Logger.Println("query err:", err)
return
}
defer rows.Close()
//遍历每一条数据
for rows.Next() {
var p = Person{}
err := rows.Scan(&p.name,&p.age)
if err != nil {
Logger.Println("rows scan err:", err)
return
}
}
查询单条记录
db.QueryRow("sql",value).Scan(&字段)
事务
开启一个事务:db.Begin()
回滚:tx.Rollback()
提交:tx.commit()