```go
var DB *sql.DB
//注意方法名大写,就是public
func InitDB() {
//构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
//打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
DB, _ = sql.Open("mysql", path)
//设置数据库最大连接数
DB.SetConnMaxLifetime(2000)
//设置上数据库最大闲置连接数
DB.SetMaxIdleConns(1000)
//验证连接
if err := DB.Ping(); err != nil {
fmt.Println("opon database fail")
//return
}
fmt.Println("connnect success")
}
func Getselect(url string) int {
//开启事务
tx, err := DB.Begin()
if err != nil {
fmt.Println("tx fail2", err)
return 1
}
stmt, err := tx.Prepare("SELECT id FROM yi08 WHERE url = ?")
if err != nil {
//log.Fatal(err)
stmt.Close()
fmt.Println(err)
return 1
}
rows, err := stmt.Query(url)
id := 0
for rows.Next() {
if err := rows.Scan(&id); err != nil {
//log.Fatal(err)
fmt.Println(err)
return 1
}
// fmt.Printf("name:%s ,id:is %d\n", name, id)
}
defer rows.Close()
return id
}
func main() {
InitDB()
for{
id := Getselect("http://xxxxxxxxxxx")
fmt.Println(id)
}
}
```
这个求大神解决,过一会就提示 Too many connections
Too many connections 连接过多,显然你没有使用连接池,循环中每次查询都会创建一个新的连接去连接数据库,连接数超过了限制,就会报错了。
#6
更多评论
1楼 <a href="/user/shileislslsl" title="@shileislslsl">@shileislslsl</a> 嗨,请认真回答我的问题,已经困扰好几天了
#2