89 lines
2.1 KiB
Go
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
|
|
}
|