整合Mysql
安装
https://zhidao.baidu.com/question/1693767839900294708.html
如果 go get失败的话,手动下载,按照路径放在 gopath下面的src路径下面,然后install就可以了db的操作分为四种:
- db.Exec (直接执行)
- db.Prepare (预执行)
- db.QueryRow (查询一条数据)
- db.Query (查询多条数据)
- 事务
- 在操作数据库之前执行,db.Begin()例:tx, err := db.Begin()
- 保存到数据库:err := tx.Commit()
- 回滚:err := tx.Rollback()
- 注意设置事务以后操作数据库就不是db了,而是tx
- 使用
参考chainZhang的,非常详细
https://www.jianshu.com/p/e9709747f5a7
//设置数据库连接参数
var (
dbhost = "127.0.0.1:3306"
dbusername = "root"
dbpassword = "123456"
dbname = "go"
)
//获取数据库连接对象
func GetDB() *sql.DB{
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", dbusername, dbpassword, dbhost, dbname))
if err!=nil{
return nil
}
return db
}
//查询多条数据
func GetAll(){
db := GetDB()
defer db.Close()
rows, err := db.Query("select username, departname, created from userinfo")
if err != nil{
fmt.Println("get all error: ", err.Error())
return
}
for rows.Next(){
var username, departname, created string
if err := rows.Scan(&username, &departname, &created); err == nil{
fmt.Println("username: ", username, "departname: ", departname, "created: ", created)
}
}
}
//查询一条数据
var username, departname, created string
err := db.QueryRow("select username, departname, created from userinfo where uid=?",id).Scan(&username, &departname, &created)
}
//直接新增
_, err := db.Exec("insert into userinfo(username,departname,created) values(?,?,?)", username, departname, time.Now())
//修改
stmt, err := db.Prepare("update userinfo set username=? where uid=?")
_, err = stmt.Exec(name, id)
//删除
stmt, err := db.Prepare("delete from userinfo where uid=?")
_, err = stmt.Exec(id)
//事务的使用
func Trans(){
db := GetDB()
defer db.Close();
tx, err := db.Begin()
if err != nil{
fmt.Println("db.Begin error: ", err.Error())
return
}
isCommit := true
defer func(){
if isCommit{
tx.Commit()
fmt.Println("commit")
}else{
tx.Rollback()
fmt.Println("Rollback")
}
}()
_, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
if err != nil{
isCommit = false
}
_, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
if err != nil{
isCommit = false
}
_, err = tx.Exec("insert into userinfo(username,departname,created) values(?,?,?)","username","departname",time.Now())
if err != nil{
isCommit = false
}
}