2019-08-07 13:16:23 +08:00
|
|
|
|
package dbUtil
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
|
|
"HFish/error"
|
2019-08-10 18:26:43 +08:00
|
|
|
|
"HFish/utils/try"
|
2019-09-02 12:56:08 +08:00
|
|
|
|
"HFish/utils/log"
|
2019-08-07 13:16:23 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 连接数据库
|
|
|
|
|
func conn() *sql.DB {
|
2019-09-02 12:56:08 +08:00
|
|
|
|
db, err := sql.Open("sqlite3", "./db/hfish.db?cache=shared&mode=rwc")
|
2019-08-07 13:16:23 +08:00
|
|
|
|
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")
|
|
|
|
|
*/
|
|
|
|
|
|
2019-08-10 18:26:43 +08:00
|
|
|
|
var id int64
|
|
|
|
|
id = 0
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-08-10 18:26:43 +08:00
|
|
|
|
try.Try(func() {
|
2019-09-02 12:56:08 +08:00
|
|
|
|
db := conn()
|
|
|
|
|
stmt, _ := db.Prepare(sql)
|
|
|
|
|
|
2019-08-10 18:26:43 +08:00
|
|
|
|
res, _ := stmt.Exec(args...)
|
2019-09-02 12:56:08 +08:00
|
|
|
|
|
|
|
|
|
//if err != nil {
|
|
|
|
|
// log.Pr("HFish", "127.0.0.1", "插入数据失败", err)
|
|
|
|
|
//}
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-08-10 18:26:43 +08:00
|
|
|
|
defer stmt.Close()
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-08-10 18:26:43 +08:00
|
|
|
|
id, _ = res.LastInsertId()
|
|
|
|
|
|
|
|
|
|
defer db.Close()
|
|
|
|
|
}).Catch(func() {})
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
|
|
|
|
return id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新数据
|
2019-09-02 12:56:08 +08:00
|
|
|
|
func Update(sql string, args ...interface{}) {
|
2019-08-07 13:16:23 +08:00
|
|
|
|
/*
|
|
|
|
|
参数说明:
|
|
|
|
|
|
|
|
|
|
sql update 语句
|
|
|
|
|
args update 参数
|
|
|
|
|
|
|
|
|
|
使用案例:
|
|
|
|
|
|
|
|
|
|
sql := `
|
|
|
|
|
UPDATE coot_tasks
|
|
|
|
|
SET task_name = ?
|
|
|
|
|
WHERE
|
|
|
|
|
id = ?;
|
|
|
|
|
`
|
|
|
|
|
dbUtil.Update(sql, "任务更新测试", 1)
|
|
|
|
|
*/
|
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
try.Try(func() {
|
|
|
|
|
db := conn()
|
|
|
|
|
stmt, _ := db.Prepare(sql)
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
_, err := stmt.Exec(args...)
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Pr("HFish", "127.0.0.1", "更新数据失败", err)
|
|
|
|
|
}
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
defer stmt.Close()
|
|
|
|
|
defer db.Close()
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
}).Catch(func() {})
|
2019-08-07 13:16:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询数据
|
|
|
|
|
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 ...)
|
2019-09-02 12:56:08 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Pr("HFish", "127.0.0.1", "查询数据失败", err)
|
|
|
|
|
}
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
|
|
|
|
defer rows.Close()
|
|
|
|
|
|
|
|
|
|
columns, err := rows.Columns()
|
2019-09-02 12:56:08 +08:00
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Pr("HFish", "127.0.0.1", "查询表名失败", err)
|
|
|
|
|
}
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除数据
|
2019-09-02 12:56:08 +08:00
|
|
|
|
func Delete(sql string, args ...interface{}) {
|
2019-08-07 13:16:23 +08:00
|
|
|
|
/*
|
|
|
|
|
参数说明:
|
|
|
|
|
|
|
|
|
|
sql delete 语句
|
|
|
|
|
args delete 参数
|
|
|
|
|
|
|
|
|
|
使用案例:
|
|
|
|
|
|
|
|
|
|
sql := `delete from coot_tasks where id=?;`
|
|
|
|
|
dbUtil.Delete(sql, 2)
|
|
|
|
|
*/
|
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
try.Try(func() {
|
|
|
|
|
db := conn()
|
|
|
|
|
stmt, _ := db.Prepare(sql)
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
_, err := stmt.Exec(args...)
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
log.Pr("HFish", "127.0.0.1", "删除数据失败", err)
|
|
|
|
|
}
|
2019-08-07 13:16:23 +08:00
|
|
|
|
|
2019-09-02 12:56:08 +08:00
|
|
|
|
defer stmt.Close()
|
|
|
|
|
defer db.Close()
|
|
|
|
|
}).Catch(func() {})
|
2019-08-07 13:16:23 +08:00
|
|
|
|
}
|