@@ -11,29 +11,62 @@ import (
11
11
)
12
12
13
13
var QunNum * int = flag .Int ("q" , 0 , "please input a QunNum like 69699987" )
14
+ var QQNum * int = flag .Int ("i" , 0 , "please input a QQNum like 43546936" )
14
15
15
16
func main () {
16
17
flag .Usage = show_usage
17
18
flag .Parse ()
18
19
19
- if * QunNum == 0 {
20
+ if * QunNum == 0 && * QQNum == 0 {
20
21
show_usage ()
21
22
return
22
23
}
24
+ //fmt.Println(*QunNum)
25
+ //fmt.Println(*QQNum)
26
+ //return
27
+ if * QunNum != 0 {
28
+ dbName , tableName := getDbAndTable (* QunNum )
23
29
24
- dbName , tableName := getDbAndTable ( * QunNum )
30
+ conn , err := db ( dbName )
25
31
26
- conn , err := db (dbName )
32
+ if err != nil {
33
+ fmt .Println ("Connecting Error" )
34
+ return
35
+ }
27
36
28
- if err != nil {
29
- fmt .Println ( "Connecting Error " )
30
- return
37
+ queryQunNum ( conn , tableName , * QunNum )
38
+ fmt .Printf ( "%s \n " , "finish " )
39
+ conn . Close ()
31
40
}
32
41
33
- queryQunNum (conn , tableName , * QunNum )
34
-
35
- fmt .Printf ("%s\n " , "finish" )
36
- conn .Close ()
42
+ if * QQNum != 0 {
43
+ conn , _ := db ("GroupData1" )
44
+ dbNames := getAllDataBase (conn )
45
+
46
+ for _ , dbName := range dbNames {
47
+ if dbName == "" {
48
+ continue
49
+ }
50
+ fmt .Println ("searching database: " + dbName )
51
+ conn , err := db (dbName )
52
+
53
+ if err != nil {
54
+ fmt .Println ("Connecting Error" )
55
+ return
56
+ }
57
+
58
+ names := getTableNames (conn )
59
+
60
+ for _ , tableName := range names {
61
+ if tableName != "" && tableName != "dtproperties" {
62
+ fmt .Println ("searching table: " + tableName )
63
+ queryQQNum (conn , tableName , * QQNum )
64
+ }
65
+ }
66
+ }
67
+ fmt .Printf ("%s\n " , "finish" )
68
+ conn .Close ()
69
+ }
37
70
38
71
return
39
72
}
@@ -45,6 +78,49 @@ func db(dbName string) (*sql.DB, error) {
45
78
return sql .Open ("odbc" , "driver={sql server};server=localhost;port=1433;uid=sa;pwd=liuawen99;database=" + dbName )
46
79
}
47
80
81
+ /**
82
+ * 查询某个QQ加了那些群
83
+ */
84
+ func queryQQNum (conn * sql.DB , tableName string , QQNum int ) {
85
+ rows , err := conn .Query ("select * from " + tableName + " where QQNum=" + strconv .Itoa (QQNum ))
86
+ if err != nil {
87
+ fmt .Println ("Query Error" , err )
88
+ return
89
+ }
90
+ defer rows .Close ()
91
+
92
+ var (
93
+ id int
94
+ qq int
95
+ nick string
96
+ age int
97
+ gender int
98
+ auth int
99
+ qun int
100
+ )
101
+
102
+ for rows .Next () {
103
+ if err := rows .Scan (& id , & qq , & nick , & age , & gender , & auth , & qun ); err == nil {
104
+ fmt .Print (id )
105
+ fmt .Print ("\t " )
106
+ fmt .Print (qq )
107
+ fmt .Print ("\t " )
108
+ fmt .Print (nick )
109
+ fmt .Print ("\t " )
110
+ fmt .Print (age )
111
+ fmt .Print ("\t " )
112
+ fmt .Print (gender )
113
+ fmt .Print ("\t " )
114
+ fmt .Print (auth )
115
+ fmt .Print ("\t " )
116
+ fmt .Print (qun )
117
+ fmt .Print ("\t \r \n " )
118
+ }
119
+ }
120
+
121
+ return
122
+ }
123
+
48
124
/**
49
125
* 查询某个QQ群的成员
50
126
*/
@@ -111,9 +187,63 @@ func getDbAndTable(QunNum int) (string, string) {
111
187
return dbName , tableName
112
188
}
113
189
190
+ /**
191
+ * 获取所有数据库的名字
192
+ */
193
+ func getAllDataBase (conn * sql.DB ) []string {
194
+ names := make ([]string , 12 ) //不能用切片,你实际上是想返回100个元素的数组,但是最后会返回200个元素,其中100个元素为空。
195
+ stmt , err := conn .Prepare ("select name from sys.databases where name like 'GroupData%'" )
196
+ if err != nil {
197
+ fmt .Println ("Query Error" , err )
198
+ return names
199
+ }
200
+ defer stmt .Close ()
201
+ row , err := stmt .Query ()
202
+ if err != nil {
203
+ fmt .Println ("Query Error" , err )
204
+ return names
205
+ }
206
+ defer row .Close ()
207
+ for row .Next () {
208
+ var name string
209
+ if err := row .Scan (& name ); err == nil {
210
+ //fmt.Println(name)
211
+ names = append (names , name )
212
+ }
213
+ }
214
+ return names
215
+ }
216
+
217
+ /**
218
+ * 获取数据库所有的表
219
+ */
220
+ func getTableNames (conn * sql.DB ) []string {
221
+ names := make ([]string , 101 ) //不能用切片,你实际上是想返回100个元素的数组,但是最后会返回200个元素,其中100个元素为空。
222
+ stmt , err := conn .Prepare ("select name from sys.objects where type='U'" )
223
+ if err != nil {
224
+ fmt .Println ("Query Error" , err )
225
+ return names
226
+ }
227
+ defer stmt .Close ()
228
+ row , err := stmt .Query ()
229
+ if err != nil {
230
+ fmt .Println ("Query Error" , err )
231
+ return names
232
+ }
233
+ defer row .Close ()
234
+ for row .Next () {
235
+ var name string
236
+ if err := row .Scan (& name ); err == nil {
237
+ //fmt.Println(name)
238
+ names = append (names , name )
239
+ }
240
+ }
241
+ return names
242
+ }
243
+
114
244
func show_usage () {
115
245
fmt .Fprintf (os .Stderr ,
116
- "Usage: %s [-q=<QunNum>]\n " +
246
+ "Usage: %s [-q=<QunNum>]\n " + " [-i=<QQNum>] \n " +
117
247
" <command> [<args>]\n \n " ,
118
248
os .Args [0 ])
119
249
fmt .Fprintf (os .Stderr ,
0 commit comments