golang mysql集群_Golang Mysql

golang mysql

package common

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

"myapp/helpers"

"time"

)

//NewMysqlConn 创建新的mysql连接池

func NewMysqlConn(source string) *sql.DB {

//sql.Open函数实际上是返回一个连接池对象,不是单个连接。

//在open的时候并没有去连接数据库,只有在执行query、exce方法的时候才会去实际连接数据库。

//在一个应用中同样的库连接只需要保存一个sql.Open之后的db对象就可以了,不需要多次open。

db, err := sql.Open("mysql", source)

if err != nil {

panic(err)

}

db.SetMaxOpenConns(2000) //最大连接

db.SetMaxIdleConns(1000) //空闲连接,也就是连接池里的数量

db.SetConnMaxLifetime(7 * time.Hour) //设置生命周期为7小时

return db

}

//获取返回值,获取一条

func GetResultRowOne(rows *sql.Rows) map[string]string {

columns, _ := rows.Columns()

scanArgs := make([]interface{}, len(columns)) // 创建一个查询字段类型的slice的键值对

values := make([][]byte, len(columns)) // 创建一个任意字段类型的slice的键值对

for j := range values {

scanArgs[j] = &values[j] // 把values每个参数的地址存入scanArgs

}

record := make(map[string]string)

for rows.Next() {

//将行数据保存到record字典

rows.Scan(scanArgs...)

for i, v := range values {

if v != nil {

//fmt.Println(reflect.TypeOf(col))

record[columns[i]] = string(v)

}

}

}

return record

}

//获取所有

func GetResultRows(rows *sql.Rows) []map[string]string {

//返回所有列

columns, _ := rows.Columns()

//这里表示一行所有列的值,用[]byte表示

vals := make([][]byte, len(columns))

//这里表示一行填充数据

scans := make([]interface{}, len(columns))

//这里scans引用vals,把数据填充到[]byte里

for k := range vals {

scans[k] = &vals[k]

}

var result []map[string]string

for rows.Next() {

//填充数据

rows.Scan(scans...)

//每行数据

row := make(map[string]string)

//把vals中的数据复制到row中

for k, v := range vals {

key := columns[k]

//这里把[]byte数据转成string

row[key] = string(v)

}//放入结果集

result = append(result, row)

}

rows.Close()

return result

}

简易使用

package main

import (

"fmt"

"myapp/common"

)

var m *common.MyMysql

var TestSource = "root:root@tcp(127.0.0.1:3306)/test?charset=utf8"

func main() {

m = &common.MyMysql{

MysqlSource: TestSource,

}

m.Conn()

defer m.MysqlConn.Close()

tInsert()

uInfoById()

uInfos()

tUpdate()

tDelete()

}

func tInsert() {

stmt,err := m.MysqlConn.Prepare("insert zq_user set uid = ? , name = ?")

if err != nil {

fmt.Println(err)

}

res,err := stmt.Exec("u3","test2")

if err != nil {

fmt.Println(err)

}

id,_ := res.LastInsertId()

fmt.Println("get id :" ,id)

}

func uInfoById () {

row,_ := m.MysqlConn.Query("select * from zq_user where uid = ?","u1111")

res := m.GetResultRowOne(row)

fmt.Println(res)

fmt.Println(res["id"],res["uid"],res["name"])

}

func uInfos() {

rows,_ := m.MysqlConn.Query("select * from zq_user")

res := m.GetResultRows(rows)

fmt.Println(res)

}

func tUpdate() {

stmt,_ := m.MysqlConn.Prepare("update zq_user set name = ? where uid = ?")

res,_ := stmt.Exec("name2","u111")

rows,_ := res.RowsAffected()

fmt.Println("rows affected :",rows)

}

func tDelete() {

stmt,_ := m.MysqlConn.Prepare("delete from zq_user where uid = ? ")

stmt.Exec("u3")

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值