当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Golang中如何对MySQL进行操作详解

Golang中如何对MySQL进行操作详解

2019年03月19日  | 移动技术网IT编程  | 我要评论

前言

golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在github上找到很多开源的驱动。

其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。

使用这个驱动, 在项目里import进:

import (
 "database/sql"
 _ "github.com/go-sql-driver/mysql"
)

在正式使用database/sql包之前,首先得明白sql.db并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道dsn的合法性,需使用sql.db实例(比如db)db.ping() 方法, 如下:

err = db.ping()
if err != nil {
 // 错误处理
}

使用sql.open()方法即可获得一个sql.db实例。需要注意的是,sql.db的设计就是用来作为长连接使用的,不应该在项目里频繁的进行open()与close(),提倡的做法是声明一个全局的sql.db实例, 将其复用起来。即只open()一次,使用直到程序结束任务。

拿到sql.db实例之后,就可以对数据库进行操作了。

在操作数据库时,推荐做法是使用db.prepare()对sql语句进行预编译,这样具有较高的安全性,可在一定程度上避免诸如sql注入这样的攻击手段。

一些示例:

/*
 查询操作
*/
stmt, err := db.prepare("select `user_name` from `users` where `id` = ?")
defer stmt.close()
if err != nil {
 //错误处理
}
var username string
//scan() 将结果复制到username
err = stmt.queryrow(1).scan(&username)

fmt.println(username)

/*
 多行结果
*/
stmt, err := db.prepare("select `user_name` from `users` where `age` = ?")
defer stmt.close()
if err != nil {
 //错误处理
}

rows, err := stmt.query(年龄)
if err != nil {
 //错误处理
}

for rows.next() {
 var username string
 if err := rows.scan(&username); err != nil {
  //错误处理
 }
}
/*
 插入操作
*/
stmt, err := db.prepare("insert into `users` (`user_name`, `age`) values(?, ?)")
defer stmt.close()
if err != nil {
 //错误处理
}
stmt.exec("名字",年龄)
/*
 事务
*/
tx, err := db.begin()
if err != nil {
 //错误处理
}
defer tx.rollback()

stmt, err := db.prepare("")
defer stmt.close()
if err != nil {
 //错误处理
}

stmt.exec()
err = tx.commit()
if err != nil {
 //错误处理
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对移动技术网的支持。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网