亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang、mysql:錯誤 1040:連接過多

Golang、mysql:錯誤 1040:連接過多

Go
MMTTMM 2021-09-13 10:40:13
我正在使用 github.com/go-sql-driver/mysql 驅動程序。我打開一個數據庫:db, err := sql.Open("mysql", str)然后我有兩個函數,每個函數使用以下 mysql 代碼調用 200 次:rows, err := db.Query("select name from beehives")if err != nil {    panic(err)}       defer rows.Close()第二:    err = db.QueryRow("select id, secret, shortname from beehives where shortname = ?", beehive).Scan(&id, &secre    switch {    case err == sql.ErrNoRows:        err = errors.New("Beehive '"+beehive+"' not found.")    case err != nil:        panic("loginBeehive: "+ err.Error())    default:        // ... do the work第一個是恐慌。當我只打開一次數據庫時,怎么會有多個連接,我該如何關閉它們?
查看完整描述

3 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

*DB您返回的對象sql.Open不對應于單個連接。最好將其視為數據庫的句柄:它為您管理連接池。

您可以控制打開的連接與數`(* DB).SetMaxOpenConns和其對怠速連接。

所以基本上這里發生的事情是,db.Querydb.QueryRow嘗試為自己獲取連接,而數據庫句柄不會對同時連接的數量施加任何限制,因此當它打開的數量超過 mysql 可以處理的數量時,您的代碼會出現恐慌。


查看完整回答
反對 回復 2021-09-13
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

盡量讓準備好的發言db.Prepare(query string) (*Stmt, error)和比stmt.Querystmt.Execstmt.Close重用連接。


查看完整回答
反對 回復 2021-09-13
  • 3 回答
  • 0 關注
  • 301 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號