goProject/trunk/framework/dataSyncMgr/mysqlSync/logSqlSync/syncErrorInfo.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

89 lines
2.1 KiB
Go

package logSqlSync
import (
"database/sql"
"fmt"
"time"
"goutil/logUtil"
)
// 错误信息记录表是否已经初始化
var ifSyncErrorInfoTableInited bool = false
// 同步的错误信息处理对象
type syncErrorInfo struct {
// 数据库连接对象
db *sql.DB
}
// 初始化表信息
func (this *syncErrorInfo) init() error {
// 初始化表结构
if ifSyncErrorInfoTableInited == false {
err := this.initTable(this.db)
if err == nil {
ifSyncErrorInfoTableInited = true
}
return err
}
return nil
}
// 把同步信息更新到数据库
// data:待更新的数据
// 返回值:
// error:错误信息
func (this *syncErrorInfo) AddErrorSql(tran *sql.Tx, data string, errMsg string) error {
updateSql := "INSERT INTO `sync_error_info` (`SqlString`,`ExecuteTime`,`RetryCount`,`ErrMessage`) VALUES(?,?,?,?);"
var err error
if tran != nil {
_, err = tran.Exec(updateSql, data, time.Now(), 0, errMsg)
} else {
_, err = this.db.Exec(updateSql, data, time.Now(), 0, errMsg)
}
if err != nil {
logUtil.ErrorLog(fmt.Sprintf("logSqlSync/syncErrorInfo.AddErrorSql Error:%s", err.Error()))
}
return err
}
// 初始化同步信息表结构
// db:数据库连接对象
func (this *syncErrorInfo) initTable(db *sql.DB) error {
// 创建同步信息表
createTableSql := `CREATE TABLE IF NOT EXISTS sync_error_info (
Id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增Id',
SqlString varchar(1024) NOT NULL COMMENT '执行的sql',
ExecuteTime datetime NOT NULL COMMENT '最近一次执行时间',
RetryCount int NOT NULL COMMENT '重试次数',
ErrMessage text NULL COMMENT '执行错误的信息',
PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='未执行成功的sql数据';`
if _, err := db.Exec(createTableSql); err != nil {
logUtil.ErrorLog(fmt.Sprintf("logSqlSync/syncErrorInfo.initTable Error:%s", err.Error()))
return err
}
return nil
}
// 创建同步信息对象
// _db:数据库连接对象
// 返回值:
// 同步信息对象
func newSyncErrorInfoObject(_db *sql.DB) (result *syncErrorInfo, err error) {
result = &syncErrorInfo{
db: _db,
}
err = result.init()
return result, err
}