1 package Network
2
3 import (
4 "SQL/myDB"
5 "database/sql"
6 "logs"
7 "net/http"
8 )
9
10 func dbPage(w http.ResponseWriter, req *http.Request) {
11 printRequestInfo(req)
12 w.Header().Set("Content-Type", "text/html;charset=utf-8")
13 w.Write([]byte(`
14 <!DOCTYPE html>
15 <html>
16 <head>
17 <title>数据库所有数据</title>
18 </head>
19 <body>
20 `))
21 w.Write([]byte(`
22 <a href="\setData?page=resetDB"><h1>重置数据</h1></a>
23 <a href="\setData?page=copyDB"><h1>复制数据</h1></a>
24 `))
25 defer w.Write([]byte(`
26 </body>
27 </html>
28 `))
29 w.Write([]byte(`
30 <h1>以下是数据库每个表前一百条,方便你们接口联调</h1>
31 `))
32 db, err := myDB.GetDB()
33 if err != nil {
34 w.Write([]byte("<p>" + err.Error() + "</p>"))
35 return
36 }
37
38 description := []string{
39 `1.objects(id int64 pk,nickname string,iconURL string,isUser bool,custom jsonb)
40 `, `2.users(id int64 fk pk,account string unique,password string,isManager bool)
41 `, `3.groups(id int64 fk pk,createtime time)
42 `, `4.members(groupID int64 fk,userID int64 fk,pk(groupID,userID))
43 `, `5.messages(id int64 pk,content string,sender int64 fk,receiver int64 fk,createTime time)
44 `, `6.sessions(senderID int64 fk,receiverID int64 fk,lastMsgID int64 fk,pk(senderID,receiverID));
45 `,
46 }
47 Sql := []string{
48 `select * from objects
49 `, `select * from users
50 `, `select * from groups
51 `, `select * from members
52 `, `select * from messages
53 `, `select * from sessions
54 `,
55 }
56 for idx := 0; idx < len(Sql); idx++ {
57 w.Write([]byte("<h2>" + description[idx] + "</h2>"))
58 err := showData(w, db, Sql[idx])
59 if err != nil {
60 logs.Print("dbPage error:", err.Error())
61 return
62 }
63 }
64 }
65
66 func showData(w http.ResponseWriter, db *sql.DB, Sql string) error {
67 Sql += " limit 100"
68 rows, err := db.Query(Sql)
69 if err != nil {
70 w.Write([]byte("<p>" + err.Error() + "</p>"))
71 return err
72 }
73 defer rows.Close()
74
75 w.Write([]byte(`
76 <table border="1">
77 <tr>
78 `))
79 defer w.Write([]byte(`
80 </tr>
81 </table> `))
82
83 cols, err := rows.Columns()
84 if err != nil {
85 w.Write([]byte(err.Error()))
86 return err
87 }
88 for _, val := range cols {
89 w.Write([]byte("<th>" + val + "</th>"))
90 }
91
92 return htmlOutputRows(w, len(cols), rows)
93 }
94 func htmlOutputRows(w http.ResponseWriter, colNum int, rows *sql.Rows) error {
95 str := make([][]byte, colNum)
96 for rows.Next() {
97 w.Write([]byte(` <tr>`))
98 args := make([]interface{}, 0)
99 for idx := 0; idx < colNum; idx++ {
100 args = append(args, &str[idx])
101 }
102 err := rows.Scan(args...)
103 if err != nil {
104 w.Write([]byte(err.Error()))
105 return err
106 }
107 for _, val := range str {
108 w.Write([]byte("<td>" + string(val) + "</td>"))
109 }
110 w.Write([]byte("</tr>"))
111 }
112 return nil
113 }