麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Golang1.7.4標(biāo)準(zhǔn)庫sql使用

2019-11-14 10:26:32
字體:
供稿:網(wǎng)友
package mainimport ( "database/sql" "errors" "fmt" "net" "sync/atomic" "time" "github.com/go-sql-driver/MySQL")func main() {}//新建mysql連接,connstr為mysql連接串"root:123456@tcp(172.18.80.211:3306)/workstacks?charset=utf8"http://maxopen為最大連接數(shù)func NewMysql(connstr string, maxopen int) (*_mysql, error) { m := &_mysql{connstr: connstr, maxopen: maxopen} err := m.dial() return m, err}var UnavailableError = errors.New("Status Unavailable")type _mysql struct { connstr string maxopen int db *sql.DB status uint32}//初始化連接串func (s *_mysql) init() error { db, err := sql.Open("mysql", s.connstr) if err != nil { return err } if s.maxopen <= 0 { db.SetMaxOpenConns(20) } else { db.SetMaxOpenConns(s.maxopen) } s.db = db return nil}//連接數(shù)據(jù)庫,當(dāng)網(wǎng)絡(luò)不可達(dá)的時(shí)候會(huì)循環(huán)連接,知道連接成功,每次連接等待時(shí)間會(huì)遞增,最大等待時(shí)間為120sfunc (s *_mysql) dial() error { if s.db == nil { err := s.init() if err != nil { return err } } var rtime time.Duration = 10redial: err := s.db.Ping() if err != nil { if _, ok := err.(*mysql.MySQLError); ok { return err } if isNetError(err) { <-time.After(rtime * time.Second) if rtime < 120 { rtime += 10 } fmt.PRintln(err) goto redial } return err } s.SetStatus(1) return nil}//重置數(shù)據(jù)庫連接信息func (s *_mysql) Reset(connstr string, maxopen int) error { db, err := sql.Open("mysql", connstr) if err != nil { return err } if maxopen <= 0 { db.SetMaxOpenConns(20) } else { db.SetMaxOpenConns(maxopen) } err = db.Ping() if err != nil { return err } s.connstr = connstr s.maxopen = maxopen tmpdb := s.db s.db = db tmpdb.Close() return nil}//執(zhí)行SQL語句,insert,update,delete等func (s *_mysql) Exec(query string, args ...interface{}) (sql.Result, error) { if s.Status() { result, err := s.db.Exec(query, args...) if err != nil { if isNetError(err) { s.SetStatus(0) if err = s.dial(); err == nil { return s.Exec(query, args...) } return nil, err } } return result, err } return nil, UnavailableError}//執(zhí)行SQL查詢func (s *_mysql) Query(query string, args ...interface{}) (*sql.Rows, error) { if s.Status() { rows, err := s.db.Query(query, args...) if err != nil { if isNetError(err) { s.SetStatus(0) if err = s.dial(); err == nil { return s.Query(query, args...) } return nil, err } } return rows, err } return nil, UnavailableError}//查看當(dāng)前狀態(tài)是否可用,返回true表示可用func (s *_mysql) Status() bool { return atomic.LoadUint32(&s.status) != 0}//設(shè)置狀態(tài),0表示狀態(tài)不可用,1表示狀態(tài)可用func (s *_mysql) SetStatus(status uint32) { atomic.StoreUint32(&s.status, status)}//關(guān)閉數(shù)據(jù)庫連接func (s *_mysql) Close() { if s.db != nil { s.db.Close() }}func isNetError(err error) bool { _, ok := err.(*net.OpError) return ok}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线天堂资源 | av成人在线免费观看 | 深夜视频福利 | www.精品视频 | av在线免费观看网站 | 羞羞的视频免费观看 | 亚洲国产精品久久久久婷婷老年 | 久久久久99999| 在线成人免费视频 | 久久久免费观看完整版 | 神马福利电影 | 久久噜噜噜精品国产亚洲综合 | 视频一区二区精品 | 一二区成人影院电影网 | 一级黄色影片在线观看 | 一分钟免费观看完整版电影 | 日本在线观看高清完整版 | 最近免费观看高清韩国日本大全 | 亚洲日本欧美 | 中国女警察一级毛片视频 | 一级全毛片 | 亚洲少妇诱惑 | av在线播放观看 | 日本在线播放一区二区三区 | 国产亚洲精品久久久闺蜜 | 激情亚洲一区二区 | 在火车上摸两乳爽的大叫 | 欧美国产一区二区三区 | 久久久婷婷一区二区三区不卡 | 亚州综合网 | 91精品国产91久久久久久不卞 | 黄污在线看| 久热久操| 成码无人av片在线观看网站 | 天天夜夜草 | 一级免费毛片 | 国产三级三级三级三级 | 中文字幕激情视频 | 欧美福利视频一区二区三区 | 天堂成人国产精品一区 | 国产羞羞网站 |