|
|
- package dbquery
-
- import (
- "database/sql"
- "log"
-
- "errors"
- "strings"
- "time"
-
- "git.tetele.net/tgo/helper"
-
- _ "github.com/go-sql-driver/mysql"
- )
-
- var DB *sql.DB
-
- var SLAVER_DB *sql.DB
-
- // db类型,默认空,如TencentDB(腾讯),
- var DB_PROVIDER string
-
- 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) error {
-
- 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 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 != "" {
- if strings.Contains(table, ",") {
- arr := strings.Split(table, ",")
- arrStrs := make([]string, 0, len(arr))
- for _, v := range arr {
- arrStrs = append(arrStrs, helper.StringJoin(dbName, ".", v))
- }
- ret = strings.Join(arrStrs, ",")
- } else {
- ret = helper.StringJoin(dbName, ".", table)
- }
- } else {
- ret = table
- }
-
- case "mssql":
- ret = helper.StringJoin(dbName, ".", table)
-
- }
- return ret
- }
-
- func GetDbTableName(dbName, table string) string {
- return getTableName(dbName, table)
- }
-
- func judg() []string {
- return []string{"=", ">", "<", "!=", "<=", ">="}
- }
|