Mysql.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package base
  2. import (
  3. "Server-Core/Server/Base/Log"
  4. "database/sql"
  5. "fmt"
  6. _ "github.com/go-sql-driver/mysql"
  7. "github.com/jmoiron/sqlx"
  8. "time"
  9. )
  10. type DBInit struct {
  11. Host string
  12. Port string
  13. User string
  14. Password string
  15. DBName string
  16. }
  17. type Db struct {
  18. sourceName string
  19. conn *sqlx.DB
  20. }
  21. func (db *Db) Create(init *DBInit) {
  22. db.sourceName = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?readTimeout=5s&writeTimeout=5s", init.User, init.Password, init.Host, init.Port, init.DBName)
  23. db.connect()
  24. }
  25. func (db *Db) connect() {
  26. c, err := sqlx.Open("mysql", db.sourceName)
  27. if err != nil {
  28. log.Error("DB连接失败 err:%s", err.Error())
  29. }
  30. db.conn = c
  31. err = db.conn.Ping()
  32. if err != nil {
  33. log.Error("DB Ping Error:%s", err.Error())
  34. }
  35. db.conn.SetConnMaxLifetime(time.Minute * 3)
  36. db.conn.SetMaxOpenConns(3)
  37. db.conn.SetMaxIdleConns(3)
  38. }
  39. func (db *Db) reconnect() {
  40. err := db.conn.Ping()
  41. if err != nil {
  42. log.Warn("DB Ping Error, Try Reconnect error:%s", err.Error())
  43. db.conn.Close()
  44. db.connect()
  45. }
  46. }
  47. func (db *Db) Get(dest interface{}, query string, args ...interface{}) {
  48. db.reconnect()
  49. error := db.conn.Get(dest, query, args...)
  50. if error != nil && error != sql.ErrNoRows {
  51. log.Error("DB Get query:%s Error:%s", query, error.Error())
  52. }
  53. }
  54. func (db *Db) Insert(query string, args ...interface{}) int64 {
  55. db.reconnect()
  56. result, err := db.conn.Exec(query, args...)
  57. if err != nil {
  58. log.Error("DB Insert query:%s Error:%s", query, err.Error())
  59. return 0
  60. }
  61. id, _ := result.LastInsertId()
  62. return id
  63. }
  64. func (db *Db) Query(query string, args ...interface{}) *sql.Rows {
  65. db.reconnect()
  66. rows, err := db.conn.Query(query, args...)
  67. if err != nil {
  68. log.Error("DB Query query:%s Error:%s", query, err.Error())
  69. return nil
  70. }
  71. return rows
  72. }
  73. func (db *Db) Update(query string, args ...interface{}) {
  74. db.reconnect()
  75. _, err := db.conn.Exec(query, args...)
  76. if err != nil {
  77. log.Error("DB Query query:%s Error:%s", query, err.Error())
  78. }
  79. }
  80. func (db *Db) Delete(query string, args ...interface{}) {
  81. db.reconnect()
  82. _, err := db.conn.Exec(query, args...)
  83. if err != nil {
  84. log.Error("DB Remove query:%s Error:%s", query, err.Error())
  85. }
  86. }
  87. func (db *Db) Release() {
  88. db.conn.Close()
  89. }