E5BotForSQLite/mysql.go
2020-03-30 22:18:09 +08:00

145 lines
3.5 KiB
Go

package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/spf13/viper"
"strings"
)
type MSData struct {
tgId int64
refreshToken string
msId string
uptime int64
alias string
clientId string
clientSecret string
other string
}
func init() {
var err error
viper.SetConfigName("config")
viper.AddConfigPath(".")
err = viper.ReadInConfig()
CheckErr(err)
host := viper.GetString("mysql.host")
user := viper.GetString("mysql.user")
port := viper.GetString("mysql.port")
pwd := viper.GetString("mysql.user")
database := viper.GetString("mysql.database")
path := strings.Join([]string{user, ":", pwd, "@tcp(", host, ":", port, ")/", database, "?charset=utf8"}, "")
//fmt.Println(path)
db, err = sql.Open(dbDriverName, path)
if !CheckErr(err) {
fmt.Println("Connect MySQL ERROR:")
return
}
fmt.Println("Connect MySQL Success!")
CreateTB(db)
}
//update data by msId
func UpdateData(db *sql.DB, u MSData) (bool, error) {
sqlString := `UPDATE users set tg_id=?,refresh_token=?,uptime=?,alias=?,client_id=?,client_secret=?,other=? where ms_id=?`
stmt, err := db.Prepare(sqlString)
if err != nil {
return false, err
}
res, err := stmt.Exec(u.tgId, u.refreshToken, u.uptime, u.alias, u.clientId, u.clientSecret, u.other, u.msId)
if err != nil {
return false, err
}
fmt.Println("Update Data Successd:", res)
return true, nil
}
//add data
func AddData(db *sql.DB, u MSData) (bool, error) {
sqlString := `
INSERT INTO users (tg_id, refresh_token,ms_id, uptime,alias,client_id,client_secret,other)
VALUES (?,?,?,?,?,?,?,?)`
stmt, err := db.Prepare(sqlString)
if err != nil {
return false, err
}
_, err = stmt.Exec(u.tgId, u.refreshToken, u.msId, u.uptime, u.alias, u.clientId, u.clientSecret, u.other)
if err != nil {
return false, err
}
return true, nil
}
//del data by ms_id
func DelData(db *sql.DB, msId string) (bool, error) {
sqlString := `delete from users where ms_id=?`
stmt, err := db.Prepare(sqlString)
if err != nil {
return false, err
}
res, err := stmt.Exec(msId)
if err != nil {
return false, err
}
_, err = res.RowsAffected()
if err != nil {
return false, err
}
return true, nil
}
func QueryData(rows *sql.Rows) []MSData {
var result = make([]MSData, 0)
defer rows.Close()
for rows.Next() {
var (
tgIdt, uptimet int64
refresht, othert, msidt, aliast, clientIdt, clientSet string
)
rows.Scan(&tgIdt, &refresht, &msidt, &uptimet, &aliast, &clientIdt, &clientSet, &othert)
//fmt.Println(string(tgNamet) + "=>" + uptimet.Format("2006-01-02 15:04:05"))
result = append(result, MSData{tgIdt, refresht, msidt, uptimet, aliast, clientIdt, clientSet, othert})
}
return result
}
func QueryDataByMS(db *sql.DB, msId string) []MSData {
rows, err := db.Query("select * from users where ms_id = ?", msId)
CheckErr(err)
return QueryData(rows)
}
func QueryDataAll(db *sql.DB) []MSData {
rows, err := db.Query("select * from users ")
CheckErr(err)
return QueryData(rows)
}
//query data by tg_id
func QueryDataByTG(db *sql.DB, tgId int64) []MSData {
rows, err := db.Query("select * from users where tg_id = ?", tgId)
CheckErr(err)
return QueryData(rows)
}
func CreateTB(db *sql.DB) (bool, error) {
sqltable := `
create table if not exists users
(
tg_id INTEGER,
refresh_token TEXT,
ms_id VARCHAR(255),
uptime INTEGER,
alias VARCHAR(255),
client_id VARCHAR(255),
client_secret VARCHAR(255),
other TEXT
);`
_, err := db.Exec(sqltable)
if err != nil {
return false, err
}
return true, nil
}