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