-
Notifications
You must be signed in to change notification settings - Fork 24
/
dbUtil.go
177 lines (136 loc) · 3.01 KB
/
dbUtil.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package dbUtil
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"Coot/error"
)
// 连接数据库
func conn() *sql.DB {
db, err := sql.Open("sqlite3", "./db/coot.db")
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")
*/
db := conn()
stmt, _ := db.Prepare(sql)
res, err := stmt.Exec(args...)
error.Check(err, "插入数据失败")
defer stmt.Close()
id, err := res.LastInsertId()
error.Check(err, "获取插入ID失败")
defer db.Close()
// 返回 自增长 ID
return id
}
// 更新数据
func Update(sql string, args ...interface{}) int64 {
/*
参数说明:
sql update 语句
args update 参数
使用案例:
sql := `
UPDATE coot_tasks
SET task_name = ?
WHERE
id = ?;
`
dbUtil.Update(sql, "任务更新测试", 1)
*/
db := conn()
stmt, _ := db.Prepare(sql)
res, err := stmt.Exec(args...)
error.Check(err, "更新数据失败")
defer stmt.Close()
affect, err := res.RowsAffected()
error.Check(err, "获取影响行数失败")
defer db.Close()
return affect
}
// 查询数据
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 ...)
error.Check(err, "查询数据失败")
defer rows.Close()
columns, err := rows.Columns()
error.Check(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{}) int64 {
/*
参数说明:
sql delete 语句
args delete 参数
使用案例:
sql := `delete from coot_tasks where id=?;`
dbUtil.Delete(sql, 2)
*/
db := conn()
stmt, _ := db.Prepare(sql)
res, err := stmt.Exec(args...)
error.Check(err, "删除数据失败")
defer stmt.Close()
affect, err := res.RowsAffected()
error.Check(err, "获取影响行数失败")
defer db.Close()
return affect
}