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 }