138 lines
3.6 KiB
Plaintext
138 lines
3.6 KiB
Plaintext
package mysqlUtil
|
||
|
||
import (
|
||
"database/sql"
|
||
"fmt"
|
||
|
||
_ "github.com/go-sql-driver/mysql"
|
||
"goutil/logUtil"
|
||
)
|
||
|
||
// 打开数据库连接
|
||
// connectionString:数据库连接字符串,格式:root:moqikaka3306@tcp(10.1.0.10:3306)/gameserver_data?charset=utf8&parseTime=true&loc=Local&timeout=60s||MaxOpenConns=10||MaxIdleConns=5
|
||
// 返回值:
|
||
// 数据库对象
|
||
// 错误对象
|
||
func OpenMysqlConnection(connectionString string) (dbObj *sql.DB, err error) {
|
||
dbConfigObj, err1 := NewDBConfig2(connectionString)
|
||
if err1 != nil {
|
||
err = err1
|
||
return
|
||
}
|
||
|
||
dbObj, err = OpenMysqlConnection3(dbConfigObj)
|
||
return
|
||
}
|
||
|
||
// 打开数据库连接
|
||
// connectionString:数据库连接字符串
|
||
// maxOpenConns:最大打开的连接数
|
||
// maxIdleConns:最大处于闲置状态的连接数
|
||
// 返回值:
|
||
// 数据库对象
|
||
// 错误对象
|
||
func OpenMysqlConnection2(connectionString string, maxOpenConns, maxIdleConns int) (dbObj *sql.DB, err error) {
|
||
dbConfigObj := NewDBConfig(connectionString, maxOpenConns, maxIdleConns)
|
||
dbObj, err = OpenMysqlConnection3(dbConfigObj)
|
||
return
|
||
}
|
||
|
||
// 建立Mysql数据库连接
|
||
// dbConfigObj:数据库配置对象
|
||
// 返回值:
|
||
// 数据库对象
|
||
// 错误对象
|
||
func OpenMysqlConnection3(dbConfigObj *DBConfig) (dbObj *sql.DB, err error) {
|
||
// 建立数据库连接
|
||
logUtil.DebugLog("开始连接Mysql数据库")
|
||
dbObj, err = sql.Open("mysql", dbConfigObj.ConnectionString)
|
||
if err != nil {
|
||
err = fmt.Errorf("打开游戏数据库失败,连接字符串为:%s", dbConfigObj.ConnectionString)
|
||
return
|
||
}
|
||
logUtil.DebugLog("连接Mysql数据库成功")
|
||
|
||
if dbConfigObj.MaxOpenConns > 0 && dbConfigObj.MaxIdleConns > 0 {
|
||
dbObj.SetMaxOpenConns(dbConfigObj.MaxOpenConns)
|
||
dbObj.SetMaxIdleConns(dbConfigObj.MaxIdleConns)
|
||
}
|
||
|
||
if err = dbObj.Ping(); err != nil {
|
||
err = fmt.Errorf("Ping数据库失败,连接字符串为:%s,错误信息为:%s", dbConfigObj.ConnectionString, err)
|
||
return
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
// 测试数据库连接
|
||
// dbObj:数据库连对象
|
||
// 返回值:
|
||
// 错误对象
|
||
func TestConnection(dbObj *sql.DB) error {
|
||
command := "SHOW DATABASES;"
|
||
rows, err := dbObj.Query(command)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
defer rows.Close()
|
||
|
||
return nil
|
||
}
|
||
|
||
// 开始事务
|
||
// db:数据库对象
|
||
// 返回值:
|
||
// 事务对象
|
||
// 错误对象
|
||
func BeginTransaction(dbObj *sql.DB) (*sql.Tx, error) {
|
||
tx, err := dbObj.Begin()
|
||
if err != nil {
|
||
logUtil.Log(fmt.Sprintf("开启事务失败,错误信息:%s", err), logUtil.Error, true)
|
||
}
|
||
|
||
return tx, err
|
||
}
|
||
|
||
// 提交事务
|
||
// tx:事务对象
|
||
// 返回值:
|
||
// 错误对象
|
||
func CommitTransaction(tx *sql.Tx) error {
|
||
err := tx.Commit()
|
||
if err != nil {
|
||
logUtil.Log(fmt.Sprintf("提交事务失败,错误信息:%s", err), logUtil.Error, true)
|
||
}
|
||
|
||
return err
|
||
}
|
||
|
||
// 记录Prepare错误
|
||
// command:执行的SQL语句
|
||
// err:错误对象
|
||
func WritePrepareError(command string, err error) {
|
||
logUtil.Log(fmt.Sprintf("Prepare失败,错误信息:%s,command:%s", err, command), logUtil.Error, true)
|
||
}
|
||
|
||
// 记录Query错误
|
||
// command:执行的SQL语句
|
||
// err:错误对象
|
||
func WriteQueryError(command string, err error) {
|
||
logUtil.Log(fmt.Sprintf("Query失败,错误信息:%s,command:%s", err, command), logUtil.Error, true)
|
||
}
|
||
|
||
// 记录Exec错误
|
||
// command:执行的SQL语句
|
||
// err:错误对象
|
||
func WriteExecError(command string, err error) {
|
||
logUtil.Log(fmt.Sprintf("Exec失败,错误信息:%s,command:%s", err, command), logUtil.Error, true)
|
||
}
|
||
|
||
// 记录Scan错误
|
||
// command:执行的SQL语句
|
||
// err:错误对象
|
||
func WriteScanError(command string, err error) {
|
||
logUtil.Log(fmt.Sprintf("Scan失败,错误信息:%s,command:%s", err, command), logUtil.Error, true)
|
||
}
|