dbmysql.go 2.91 KB
package mysql

import (
	"HttpServer/conf"
	"common/logger"
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"os"
	"strconv"
	"time"
)

var (
	m_game_db             *sql.DB
)

func InitMysql() error {
	db, err := InitMysqlByConf(conf.GetGameDBConf())
	if err != nil {
		return err
	}
	m_game_db = db
	return nil
}

func InitMysqlByConf(cfg conf.MysqlConf) (*sql.DB, error) {
	url := cfg.User + ":" + cfg.Pwd + "@tcp(" + cfg.Ip + ":" + strconv.Itoa(cfg.Port) + ")/" + cfg.Database + "?charset=utf8"
	db, err := sql.Open("mysql", url)
	if err != nil {
		logger.Notic("Open mysql failed:%v url:%v", err, url)
		return nil, err
	}
	return db, nil
}

func ExcuteCmd(cmd string) error {
	rows, err := m_game_db.Query(cmd)
	if rows != nil {
		defer rows.Close()
	}
	if err != nil {
		logger.Notic("ExcuteCmd Query error:%v cmd:%v", err, cmd)
		return err
	}
	return err
}



func TestClearData(uid int) (int,error) {
	cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid)

	rows, err := m_game_db.Query(cmd)
	if rows != nil {
		defer rows.Close()
	}
	if err != nil {
		logger.Notic("TestClearData mysql select error:%v", err)
		return 0,err
	}


	var value int
	for rows.Next() {

		err = rows.Scan(&value)
		if err != nil {
			logger.Notic("TestClearData mysql handle result error:%v", err)
			return 0,err
		}
		logger.Info("TestClearData coin=%v",value)

		break
	}
	return value,nil
}

func DoClearData(uuid int) error{
	//先删除十张分表的数据
	for i:=0;i<10;i++ {
		tablename := "b_base_data_0" + strconv.Itoa(i)
		cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid)
		err := ExcuteCmd(cmd)
		if err != nil {
			logger.Error("DoClearData err=%v,cmd=%v",err,cmd)
			return err
		}
	}
	return nil

}



func QueryAllData(f *os.File) error{

	//先查询十张分表的数据
	for i:=0;i<10;i++ {
		tablename := "b_user_ext_0" + strconv.Itoa(i)
		cmd := "SELECT user_id,lv,exp,login_time from " + tablename
		rows, err := m_game_db.Query(cmd)
		defer func() {
			if rows != nil {
				rows.Close() //可以关闭掉未scan连接一直占用
			}
		}()
		if err != nil {
			logger.Error("Query failed,err:%v", err)
			return err
		}
		for rows.Next() {
			Uid := 0
			Ulv := 0
			Exp := 0
			LoginTime := 0
			err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放
			if err != nil {
				logger.Error("Scan failed,err:%v", err)
				return err
			}

			//w := bufio.NewWriter(f)
			if LoginTime <= 1588262400 {
				//5.1之前的不做处理
				continue
			}
			tm := time.Unix(int64(LoginTime), 0)
			//fmt.Println(tm.Format("2006-01-02 15:04:05"))
			str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n"
			_,err = f.WriteString(str)
			//logger.Info("ddt str=%v",str)
			if err != nil {
				logger.Error("WRITETOFILEFAILED ERR=%v",err)
				return err
			}
			//fmt.Fprintln(w, str)
			//w.Flush()
		}
	}
	return nil

}