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{"=", ">", "<", "!=", "<=", ">="} }