sniffer-agent/vendor/github.com/zr-hebo/util-db/query_pooled_db.go

106 lines
2.0 KiB
Go

package db
import (
"database/sql"
"sync"
"time"
)
// PooledMysqlDB Mysql主机实例
type PooledMysqlDB struct {
MysqlDB
conn *sql.DB
lock *sync.Mutex
}
// NewPooledMysqlDBWithParam 带参数创建MySQL数据库
func NewPooledMysqlDBWithParam(
ip string, port int, userName, passwd string) (
pmd *PooledMysqlDB) {
pmd = NewPooledMysqlDB()
pmd.IP = ip
pmd.Port = port
pmd.UserName = userName
pmd.Passwd = passwd
pmd.DatabaseType = dbTypeMysql
return
}
// NewPooledMysqlDBWithAllParam 带参数创建MySQL数据库
func NewPooledMysqlDBWithAllParam(
ip string, port int, userName, passwd, dbName string) (
pmd *PooledMysqlDB) {
pmd = NewPooledMysqlDB()
pmd.IP = ip
pmd.Port = port
pmd.UserName = userName
pmd.Passwd = passwd
pmd.DBName = dbName
return
}
// NewPooledMysqlDB 创建MySQL数据库
func NewPooledMysqlDB() (pmd *PooledMysqlDB) {
pmd = new(PooledMysqlDB)
pmd.DatabaseType = dbTypeMysql
pmd.lock = new(sync.Mutex)
return
}
// CloseConnection 获取数据库连接
func (pmd *PooledMysqlDB) CloseConnection() (err error) {
if pmd.conn == nil {
return
}
err = pmd.conn.Close()
return
}
// GetConnection 获取数据库连接
func (pmd *PooledMysqlDB) GetConnection() (conn *sql.DB, err error) {
pmd.lock.Lock()
defer func() {
pmd.lock.Unlock()
}()
if pmd.conn != nil {
conn = pmd.conn
return
}
conn, err = pmd.MysqlDB.getConnection()
if err != nil {
return
}
conn.SetConnMaxLifetime(time.Second * 60 * 30)
conn.SetMaxOpenConns(0)
if err := conn.Ping(); err != nil {
return nil, err
}
pmd.conn = conn
return
}
// ExecChange 执行MySQL Query语句
func (pmd *PooledMysqlDB) ExecChange(stmt string, args ...interface{}) (
result sql.Result, err error) {
return pmd.MysqlDB.ExecChange(stmt, args...)
}
// QueryRows 执行MySQL Query语句
func (pmd *PooledMysqlDB) QueryRows(stmt string) (queryRows *QueryRows, err error) {
return pmd.MysqlDB.QueryRows(stmt)
}
// QueryRow 执行MySQL Query语句
func (pmd *PooledMysqlDB) QueryRow(stmt string) (row *QueryRow, err error) {
return pmd.MysqlDB.QueryRow(stmt)
}