You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
4.5 KiB
203 lines
4.5 KiB
package db
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
// 创建服务器数据库
|
|
func CreateScdb() {
|
|
// 建表语句
|
|
sts := `
|
|
CREATE TABLE IF NOT EXISTS sc_server (
|
|
id INTEGER PRIMARY KEY NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
scname TEXT NOT NULL,
|
|
addr TEXT NOT NULL,
|
|
port TEXT NOT NULL,
|
|
token TEXT NOT NULL,
|
|
status INTEGER NOT NULL
|
|
);`
|
|
// 系统用户表
|
|
sts += `
|
|
CREATE TABLE IF NOT EXISTS sc_user (
|
|
id INTEGER PRIMARY KEY NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT NOT NULL,
|
|
password TEXT NOT NULL
|
|
);`
|
|
// 执行建表语句
|
|
_, err = db.Exec(sts)
|
|
if err != nil {
|
|
fmt.Printf("Failed to create database table: %v\n", err)
|
|
return
|
|
}
|
|
fmt.Printf("Successfully created database table! \n")
|
|
}
|
|
|
|
// 记录服务器的信息
|
|
func AddServerInfo(info *StServerInfo) error {
|
|
// 插入语句
|
|
stmt, err := db.Prepare("INSERT INTO s_info (id, addr, port, token) VALUES (?, ?, ?, ?)")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer stmt.Close()
|
|
// 执行插入语句
|
|
_, err = stmt.Exec(info.Id, info.Addr, info.Port, info.Token)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// 查询所有的记录
|
|
func GetlScList(status int) (sclist []StServerInfo) {
|
|
// 结果集
|
|
sclist = make([]StServerInfo, 0)
|
|
|
|
// 查询语句
|
|
rows, err := db.Query("SELECT * FROM sc_server WHERE status = ?", status)
|
|
|
|
//
|
|
if err != nil {
|
|
fmt.Printf("Failed to query data: %v\n", err)
|
|
return
|
|
}
|
|
// FOR loop
|
|
for rows.Next() {
|
|
// var weight float64
|
|
var info StServerInfo
|
|
//将赋值到对应的字段上
|
|
err = rows.Scan(&info.Id, &info.Scname, &info.Addr, &info.Port, &info.Token, &info.Status)
|
|
|
|
if err != nil {
|
|
fmt.Printf("Failed to read data: %v\n", err)
|
|
continue
|
|
}
|
|
sclist = append(sclist, info)
|
|
}
|
|
return sclist
|
|
}
|
|
|
|
// 获取服务器信息
|
|
func GetServerInfo(id int16) StServerInfo {
|
|
// 查询语句
|
|
stmt, err := db.Prepare("SELECT * FROM sc_server WHERE id = ?")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer stmt.Close()
|
|
// 执行查询语句
|
|
row := stmt.QueryRow(id)
|
|
// 定义一个结构体变量
|
|
var info StServerInfo
|
|
// 扫描查询结果
|
|
err = row.Scan(&info.Id, &info.Scname, &info.Addr, &info.Port, &info.Token, &info.Status)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return info
|
|
}
|
|
|
|
// 更新服务器信息
|
|
func UpdateServerInfo(info StServerInfo) int {
|
|
log.Printf("UpdateServerInfo: %v", info)
|
|
// 更新语句
|
|
stmt, err := db.Prepare("UPDATE sc_server SET scname = ?, addr = ?, port = ?, token = ?, status = ? WHERE id = ?")
|
|
if err != nil {
|
|
// panic(err)
|
|
log.Fatalf("UpdateServerInfo: %s", err)
|
|
// return 0
|
|
}
|
|
defer stmt.Close()
|
|
// 执行更新语句
|
|
result, err := stmt.Exec(info.Scname, info.Addr, info.Port, info.Token, info.Status, info.Id)
|
|
if err != nil {
|
|
// panic(err)
|
|
log.Fatalf("UpdateServerInfo: %s", err)
|
|
// return 0
|
|
}
|
|
// 执行的sql语句
|
|
log.Printf("执行的sql语句: %v", stmt)
|
|
// 执行的参数
|
|
log.Printf("执行的参数: %v", info)
|
|
|
|
// 影响的行数
|
|
rows, err := result.RowsAffected()
|
|
if err != nil {
|
|
log.Fatalf("UpdateServerInfo: %s", err)
|
|
}
|
|
log.Printf("影响行数: %d", rows)
|
|
// 执行反馈
|
|
if int(rows) > 0 {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// 删除服务器信息
|
|
func DeleteServerInfo(id string) error {
|
|
// 删除语句
|
|
stmt, err := db.Prepare("DELETE FROM s_info WHERE id = ?")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer stmt.Close()
|
|
// 执行删除语句
|
|
_, err = stmt.Exec(id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// 获取所有服务器信息
|
|
func GetAllServerInfo() (infos []StServerInfo) {
|
|
// 查询语句
|
|
stmt, err := db.Prepare("SELECT * FROM sc_server")
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
defer stmt.Close()
|
|
// 执行查询语句
|
|
rows, err := stmt.Query()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
defer rows.Close()
|
|
// 定义一个结构体变量
|
|
var info StServerInfo
|
|
|
|
// 遍历查询结果
|
|
for rows.Next() {
|
|
// 扫描查询结果
|
|
err = rows.Scan(&info.Id, &info.Scname, &info.Addr, &info.Port, &info.Token, &info.Status)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
// 追加到切片变量
|
|
infos = append(infos, info)
|
|
}
|
|
// 返回切片变量
|
|
return infos
|
|
}
|
|
|
|
// 检查服务器是否存在
|
|
func CheckServerExist(id string) (bool, error) {
|
|
// 查询语句
|
|
stmt, err := db.Prepare("SELECT id FROM s_info WHERE id = ?")
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
defer stmt.Close()
|
|
// 执行查询语句
|
|
row := stmt.QueryRow(id)
|
|
// 定义一个结构体变量
|
|
var info StServerInfo
|
|
// 扫描查询结果
|
|
err = row.Scan(&info.Id)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
// 返回结果
|
|
return true, nil
|
|
}
|
|
|