123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package c_db
- import (
- "cicv-data-closedloop/common/config/c_log"
- _ "github.com/go-sql-driver/mysql"
- "github.com/jmoiron/sqlx"
- "os"
- )
- var MysqlDb *sqlx.DB
- // InitSqlxMysql 初始化mysql连接
- // - charset 字符集 utf8、utf8mb4
- func InitSqlxMysql(username string, password string, ip string, port string, dbname string, charset string) {
- var err error
- // 连接数据库
- // - parseTime 是否将数据库中的时间类型字段解析为 Go 中的 time.Time 类型。
- // - loc 时间解析时使用的本地位置信息。通常设置为 "Local"。
- MysqlDb, err = sqlx.Open("mysql", username+":"+password+"@tcp("+ip+":"+port+")/"+dbname+"?charset="+charset+"&parseTime=True&loc=Local")
- if err != nil {
- c_log.GlobalLogger.Error("程序退出。mysql连接失败:", err)
- os.Exit(-1)
- }
- // 配置连接池
- MysqlDb.SetMaxOpenConns(10) // 设置最大打开连接数为 10
- MysqlDb.SetMaxIdleConns(5) // 设置最大空闲连接数为 5
- MysqlDb.SetConnMaxLifetime(0) // 设置连接的最大生存时间为 0(不限制)
- c_log.GlobalLogger.Info("mysql连接成功。")
- }
- func DoTx(sqlTemplate string, params []any) error {
- // 插入到数据库
- tx, err := MysqlDb.Beginx()
- if err != nil {
- c_log.GlobalLogger.Error("开启事务失败:", err)
- return err
- }
- // 2 在事务中执行操作
- _, err = tx.Exec(sqlTemplate, params...)
- if err != nil {
- c_log.GlobalLogger.Error("执行操作失败,回滚事务:", err)
- tx.Rollback()
- return err
- }
- // 如果所有操作成功,则提交事务
- err = tx.Commit()
- if err != nil {
- c_log.GlobalLogger.Error("提交事务失败:", err)
- return err
- }
- return nil
- }
|