HFish/core/dbUtil/dbUtil.go
2019-09-02 12:56:08 +08:00

194 lines
3.2 KiB
Go

package dbUtil
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"HFish/error"
"HFish/utils/try"
"HFish/utils/log"
)
// 连接数据库
func conn() *sql.DB {
db, err := sql.Open("sqlite3", "./db/hfish.db?cache=shared&mode=rwc")
error.Check(err, "连接数据库失败")
return db
}
// 插入数据
func Insert(sql string, args ...interface{}) int64 {
/*
参数说明:
sql insert 语句
args insert value 参数
使用案例:
sql := `
INSERT INTO coot_tasks (
task_name,
task_explain,
task_id,
task_time_type,
task_time,
last_exec_time,
is_plug_script,
script_type,
script_path,
alert_type,
create_time
)
VALUES
(?,?,?,?,?,?,?,?,?,?,?);
`
dbUtil.Insert(sql, "插入任务测试", "测试说明", "", 1, "2", "", "1", "shell", "/scripts/myscript/test.sh", "1", "2019-07-10 16:12")
*/
var id int64
id = 0
try.Try(func() {
db := conn()
stmt, _ := db.Prepare(sql)
res, _ := stmt.Exec(args...)
//if err != nil {
// log.Pr("HFish", "127.0.0.1", "插入数据失败", err)
//}
defer stmt.Close()
id, _ = res.LastInsertId()
defer db.Close()
}).Catch(func() {})
return id
}
// 更新数据
func Update(sql string, args ...interface{}) {
/*
参数说明:
sql update 语句
args update 参数
使用案例:
sql := `
UPDATE coot_tasks
SET task_name = ?
WHERE
id = ?;
`
dbUtil.Update(sql, "任务更新测试", 1)
*/
try.Try(func() {
db := conn()
stmt, _ := db.Prepare(sql)
_, err := stmt.Exec(args...)
if err != nil {
log.Pr("HFish", "127.0.0.1", "更新数据失败", err)
}
defer stmt.Close()
defer db.Close()
}).Catch(func() {})
}
// 查询数据
func Query(sql string, args ...interface{}) []map[string]interface{} {
/*
参数说明:
sql select 语句
args select 参数
使用案例:
sql := `select * from coot_tasks where id=?;`
result := dbUtil.Query(sql, 1)
*/
db := conn()
rows, err := db.Query(sql, args ...)
if err != nil {
log.Pr("HFish", "127.0.0.1", "查询数据失败", err)
}
defer rows.Close()
columns, err := rows.Columns()
if err != nil {
log.Pr("HFish", "127.0.0.1", "查询表名失败", err)
}
count := len(columns)
tableData := make([]map[string]interface{}, 0)
values := make([]interface{}, count)
valuePtrs := make([]interface{}, count)
for rows.Next() {
for i := 0; i < count; i++ {
valuePtrs[i] = &values[i]
}
rows.Scan(valuePtrs...)
entry := make(map[string]interface{})
for i, col := range columns {
var v interface{}
val := values[i]
b, ok := val.([]byte)
if ok {
v = string(b)
} else {
v = val
}
entry[col] = v
}
tableData = append(tableData, entry)
}
defer db.Close()
return tableData
}
// 删除数据
func Delete(sql string, args ...interface{}) {
/*
参数说明:
sql delete 语句
args delete 参数
使用案例:
sql := `delete from coot_tasks where id=?;`
dbUtil.Delete(sql, 2)
*/
try.Try(func() {
db := conn()
stmt, _ := db.Prepare(sql)
_, err := stmt.Exec(args...)
if err != nil {
log.Pr("HFish", "127.0.0.1", "删除数据失败", err)
}
defer stmt.Close()
defer db.Close()
}).Catch(func() {})
}