| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package base
- import (
- "Server-Core/Server/Base/Log"
- "database/sql"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/jmoiron/sqlx"
- "time"
- )
- type DBInit struct {
- Host string
- Port string
- User string
- Password string
- DBName string
- }
- type Db struct {
- sourceName string
- conn *sqlx.DB
- }
- func (db *Db) Create(init *DBInit) {
- db.sourceName = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?readTimeout=5s&writeTimeout=5s", init.User, init.Password, init.Host, init.Port, init.DBName)
- db.connect()
- }
- func (db *Db) connect() {
- c, err := sqlx.Open("mysql", db.sourceName)
- if err != nil {
- log.Error("DB连接失败 err:%s", err.Error())
- }
- db.conn = c
- err = db.conn.Ping()
- if err != nil {
- log.Error("DB Ping Error:%s", err.Error())
- }
- db.conn.SetConnMaxLifetime(time.Minute * 3)
- db.conn.SetMaxOpenConns(3)
- db.conn.SetMaxIdleConns(3)
- }
- func (db *Db) reconnect() {
- err := db.conn.Ping()
- if err != nil {
- log.Warn("DB Ping Error, Try Reconnect error:%s", err.Error())
- db.conn.Close()
- db.connect()
- }
- }
- func (db *Db) Get(dest interface{}, query string, args ...interface{}) {
- db.reconnect()
- error := db.conn.Get(dest, query, args...)
- if error != nil && error != sql.ErrNoRows {
- log.Error("DB Get query:%s Error:%s", query, error.Error())
- }
- }
- func (db *Db) Insert(query string, args ...interface{}) int64 {
- db.reconnect()
- result, err := db.conn.Exec(query, args...)
- if err != nil {
- log.Error("DB Insert query:%s Error:%s", query, err.Error())
- return 0
- }
- id, _ := result.LastInsertId()
- return id
- }
- func (db *Db) Query(query string, args ...interface{}) *sql.Rows {
- db.reconnect()
- rows, err := db.conn.Query(query, args...)
- if err != nil {
- log.Error("DB Query query:%s Error:%s", query, err.Error())
- return nil
- }
- return rows
- }
- func (db *Db) Update(query string, args ...interface{}) {
- db.reconnect()
- _, err := db.conn.Exec(query, args...)
- if err != nil {
- log.Error("DB Query query:%s Error:%s", query, err.Error())
- }
- }
- func (db *Db) Delete(query string, args ...interface{}) {
- db.reconnect()
- _, err := db.conn.Exec(query, args...)
- if err != nil {
- log.Error("DB Remove query:%s Error:%s", query, err.Error())
- }
- }
- func (db *Db) Release() {
- db.conn.Close()
- }
|