mysql的安装以及配置,网上的教程很多,这里就不用多说了,值得注意的是:安装好了,一定要先启动mysql服务,创建相应的数据库和表
golang连接数据库用户的驱动是:go-sql-driver
go get -u github.com/go-sql-driver/mysql
//数据库配置
const (
userName = "root"
password = "123456"
ip = "127.0.0.1"
port = "3306"
dbName = "loginserver"
)
//Db数据库连接池
var DB *sql.DB
//注意方法名大写,就是public
func InitDB() {
//构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
//打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
DB, _ = sql.Open("mysql", path)
//设置数据库最大连接数
DB.SetConnMaxLifetime(100)
//设置上数据库最大闲置连接数
DB.SetMaxIdleConns(10)
//验证连接
if err := DB.Ping(); err != nil{
fmt.Println("opon database fail")
return
}
fmt.Println("connnect success")
}
数据库的insert, delete以及update的步骤内容大致一致,差别就是sql语句的变化
步骤:
name
, password
) VALUES (?, ?)”)参考代码如下:
func InsertUser(user bean.User) (bool){
//开启事务
tx, err := DB.Begin()
if err != nil{
fmt.Println("tx fail")
return false
}
//准备sql语句
stmt, err := tx.Prepare("INSERT INTO nk_user (`name`, `password`) VALUES (?, ?)")
if err != nil{
fmt.Println("Prepare fail")
return false
}
//将参数传递到sql语句中并且执行
res, err := stmt.Exec(user.UserName, user.Password)
if err != nil{
fmt.Println("Exec fail")
return false
}
//将事务提交
tx.Commit()
//获得上一个插入自增的id
fmt.Println(res.LastInsertId())
return true
}
步骤:
参考代码如下:
func DeleteUser(user bean.User) (bool) {
//开启事务
tx, err := DB.Begin()
if err != nil{
fmt.Println("tx fail")
}
//准备sql语句
stmt, err := tx.Prepare("DELETE FROM nk_user WHERE id = ?")
if err != nil{
fmt.Println("Prepare fail")
return false
}
//设置参数以及执行sql语句
res, err := stmt.Exec(user.Id)
if err != nil{
fmt.Println("Exec fail")
return false
}
//提交事务
tx.Commit()
//获得上一个insert的id
fmt.Println(res.LastInsertId())
return true
}
步骤:
参考代码如下:
func UpdateUser(user bean.User) (bool) {
//开启事务
tx, err := DB.Begin()
if err != nil{
fmt.Println("tx fail")
}
//准备sql语句
stmt, err := tx.Prepare("UPDATE nk_user SET name = ?, password = ? WHERE id = ?")
if err != nil{
fmt.Println("Prepare fail")
return false
}
//设置参数以及执行sql语句
res, err := stmt.Exec(user.UserName, user.Password, user.Id)
if err != nil{
fmt.Println("Exec fail")
return false
}
//提交事务
tx.Commit()
fmt.Println(res.LastInsertId())
return true
}
func SelectUserById(id int) (bean.User) {
var user bean.User
err := DB.QueryRow("SELECT * FROM nk_user WHERE id = ?", id).Scan(&user.Id, &user.UserName, &user.Password)
if err != nil{
fmt.Println("查询出错了")
}
return user
}
func SelectAllUser() ([]bean.User) {
//执行查询语句
rows, err := DB.Query("SELECT * from nk_user")
if err != nil{
fmt.Println("查询出错了")
}
var users []bean.User
//循环读取结果
for rows.Next(){
var user bean.User
//将每一行的结果都赋值到一个user对象中
err := rows.Scan(&user.Id, &user.UserName, &user.Password)
if err != nil {
fmt.Println("rows fail")
}
//将user追加到users的这个数组中
users = append(users, user)
}
return users
}