myql操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

187 lines
4.5 KiB

package tencentdb
import (
"database/sql"
"log"
"errors"
"strings"
"time"
_ "github.com/go-sql-driver/mysql"
)
var DB *sql.DB
var dbhost_slaver, dbname_slaver, dbport_slaver, dbuser_slaver, dbpwd_slaver string //从库信息
var use_slaver bool = false
func Connect(DBHOST, DBUSER, DBPWD, DBNAME, DBPORT string, conns ...int) error {
log.Println("database connectting...")
var dbConnErr error
if DBHOST != "" && DBUSER != "" && DBPWD != "" && DBPORT != "" { //&& DBNAME != ""
for i := 0; i < 10; i++ {
DB, dbConnErr = sql.Open("mysql", DBUSER+":"+DBPWD+"@tcp("+DBHOST+":"+DBPORT+")/"+DBNAME+"?charset=utf8mb4")
if dbConnErr != nil {
log.Println("ERROR", "can not connect to Database, ", dbConnErr)
time.Sleep(time.Second * 5)
} else {
if len(conns) > 0 {
DB.SetMaxOpenConns(conns[0]) //用于设置最大打开的连接数,默认值为0表示不限制
} else {
DB.SetMaxOpenConns(200) //默认值为0表示不限制
}
if len(conns) > 1 {
DB.SetMaxIdleConns(conns[1]) //用于设置闲置的连接数
} else {
DB.SetMaxIdleConns(50)
}
DB.Ping()
log.Println("database connected")
DB.SetConnMaxLifetime(time.Minute * 2)
break
}
}
} else {
return errors.New("db connection params errors")
}
return dbConnErr
}
func CloseConn() error {
return DB.Close()
}
func ConnectSlaver(DBHOST, DBUSER_SLAVER, DBPWD_SLAVER, DBNAME, DBPORT string, conns ...int) {
dbhost_slaver = DBHOST
dbuser_slaver = DBUSER_SLAVER
dbpwd_slaver = DBPWD_SLAVER
dbname_slaver = DBNAME
dbport_slaver = DBPORT
use_slaver = true
// log.Println("database connectting with slaver...")
// var dbConnErr error
// if DBHOST != "" && DBUSER_SLAVER != "" && DBPWD_SLAVER != "" && DBPORT != "" { //&& DBNAME != ""
// for i := 0; i < 10; i++ {
// SLAVER_DB, dbConnErr = sql.Open("mysql", DBUSER_SLAVER+":"+DBPWD_SLAVER+"@tcp("+DBHOST+":"+DBPORT+")/"+DBNAME+"?charset=utf8mb4")
// if dbConnErr != nil {
// log.Println("ERROR", "can not connect to Database, ", dbConnErr)
// time.Sleep(time.Second * 5)
// } else {
// if len(conns) > 0 {
// SLAVER_DB.SetMaxOpenConns(conns[0]) //用于设置最大打开的连接数,默认值为0表示不限制
// } else {
// SLAVER_DB.SetMaxOpenConns(200) //默认值为0表示不限制
// }
// if len(conns) > 1 {
// SLAVER_DB.SetMaxIdleConns(conns[1]) //用于设置闲置的连接数
// } else {
// SLAVER_DB.SetMaxIdleConns(50)
// }
// SLAVER_DB.Ping()
// log.Println("database connected")
// SLAVER_DB.SetConnMaxLifetime(time.Minute * 2)
// break
// }
// }
// } else {
// return errors.New("db connection params errors")
// }
// return dbConnErr
}
func connectDb(dbhost, dbuser, dbpwd, dbname, dbport string, conns ...int) (*sql.DB, error) {
log.Println("database connectting...")
var dbconn *sql.DB
var dbConnErr error
if dbhost != "" && dbuser != "" && dbpwd != "" && dbport != "" {
for i := 0; i < 10; i++ {
dbconn, dbConnErr = sql.Open("mysql", dbuser+":"+dbpwd+"@tcp("+dbhost+":"+dbport+")/"+dbname+"?charset=utf8mb4")
if dbConnErr != nil {
log.Println("ERROR", "can not connect to Database, ", dbConnErr)
time.Sleep(time.Second * 5)
} else {
if len(conns) > 0 {
dbconn.SetMaxOpenConns(conns[0]) //用于设置最大打开的连接数,默认值为0表示不限制
} else {
dbconn.SetMaxOpenConns(200) //默认值为0表示不限制
}
if len(conns) > 1 {
dbconn.SetMaxIdleConns(conns[1]) //用于设置闲置的连接数
} else {
dbconn.SetMaxIdleConns(50)
}
// dbconn.Ping()
// log.Println(dbconn.Stats())
log.Println("database connected")
dbconn.SetConnMaxLifetime(time.Minute * 1)
break
}
}
} else {
return nil, errors.New("db connection params errors")
}
return dbconn, dbConnErr
}
// func CloseSlaverConn() error {
// return SLAVER_DB.Close()
// }
/**
* 检测表名
*/
func getTableName(dbName, table string, dbtype ...string) string {
var db_type string = "mysql"
if len(dbtype) > 0 {
if dbtype[0] != "" {
db_type = dbtype[0]
}
}
var ret string
switch db_type {
case "mysql":
if strings.Contains(table, ".") {
ret = table
}
if dbName != "" {
ret = StringJoin(dbName, ".", table)
} else {
ret = table
}
case "mssql":
ret = StringJoin(dbName, ".", table)
}
return ret
}
func GetDbTableName(dbName, table string) string {
return getTableName(dbName, table)
}
func judg() []string {
return []string{"=", ">", "<", "!=", "<=", ">="}
}