package db import ( "fmt" "log" ) // 创建服务器数据库 func CreateScdb() { // 建表语句 sts := ` CREATE TABLE 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 );` // 执行建表语句 _, 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 }