zoukankan      html  css  js  c++  java
  • go 读取数据库所有表数据显示到网页(便于测试时看)

      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 }
    /dbPage
  • 相关阅读:
    Maven安装
    Linux登录欢迎图案
    GC的性能指标和内存容量配置原则
    java堆结构和垃圾回收
    框架设计知识点纵览(笔记)
    .net core在Linux本地化Localization的一次填坑
    .Net Identity OAuth 2.0 SecurityStamp 使用
    CentOS 7 安装. Net Core SDK 2.0
    Docker基本命令与使用 —— Docker容器的网络连接(四)
    Docker基本命令与使用 —— Dockerfile指令与构建(三)
  • 原文地址:https://www.cnblogs.com/cdyboke/p/6816369.html
Copyright © 2011-2022 走看看