gin框架web操作数据库

前台页面新增数据

html

 1 //cat src/page/login.html
 2 
 3 <!DOCTYPE html>
 4 <html lang="en">
 5 <head>
 6     <meta charset="UTF-8">
 7     <title>添加学生信息</title>
 8 
 9 </head>
10 <body>
11 <form action="http://127.0.0.1:8080/form" method="POST" enctype="application/x-www-form-urlencoded">
12 
13 
14     <div>
15 
16         <label>学号:
17             <input type="text" name="no">
18         </label>
19     </div>
20 
21     <div>
22 
23         <label> 姓名:
24             <input type="text" name="name">
25         </label>
26     </div>
27 
28     <div>
29 
30         <label> 成绩:
31             <input type="number" name="score">
32         </label>
33     </div>
34 
35 
36 
37 
38     <div>
39 
40         <input type="submit" value="提交">
41     </div>
42 
43 
44 
45 </form>
46 </body>
47 </html>

go

  1 //cat src/main/main.go
  2 
  3 package main
  4 
  5 import (
  6     "database/sql"
  7     "fmt"
  8     "github.com/gin-gonic/gin"
  9     _ "github.com/go-sql-driver/mysql"
 10     "log"
 11     "strings"
 12 )
 13 
 14 //定义一个和表对应的结构体
 15 type Student struct {
 16     id    int
 17     no    string //学号
 18     name  string //姓名
 19     score uint   //成绩
 20 }
 21 
 22 func main() {
 23 
 24     //1. 创建路由
 25     r := gin.Default()
 26 
 27     //2.
 28     r.POST("/form", func(c *gin.Context) {
 29 
 30         //表单参数设置默认值
 31         type1 := c.DefaultPostForm("type", "alert")
 32 
 33         //接收username,password
 34         no := c.PostForm("no")
 35         name := c.PostForm("name")
 36         score := c.PostForm("score")
 37 
 38         //DATABASE BASH
 39         db, err := InitDatabase()
 40         defer db.Close()
 41         if err != nil {
 42             log.Println(err)
 43             return
 44         }
 45         ////增
 46         insertSql := "insert into student(no, name, score) values(?, ?, ?)"
 47         err = Execute(db, insertSql, no, name, score)
 48         if err != nil {
 49             log.Printf("insert data error : %v\n", err)
 50             return
 51         }
 52 
 53         //
 54         querySql := "select id, no, name, score from student where name = ?"
 55         rows, err := QueryData(db, querySql, "Jack")
 56         defer rows.Close()
 57         if err != nil {
 58             log.Printf("query data error:%v\n", err)
 59             return
 60         }
 61         s := new(Student)
 62 
 63         for rows.Next() {
 64             rows.Scan(&s.id, &s.no, &s.name, &s.score)
 65             log.Println(*s)
 66         }
 67 
 68         ////改
 69         //updateSql := "update student set name = ? where no = ?"
 70         //Execute(db, updateSql, "Rose", "123456")
 71         //
 72         ////删
 73         //deleteSql := "delete from student where no = ? "
 74         //Execute(db, deleteSql,"123456")
 75 
 76         c.String(200,
 77             fmt.Sprintf(type1, no, name, score))
 78 
 79     })
 80     //3. 监听
 81     r.Run()
 82 
 83 }
 84 
 85 //初始化数据库连接
 86 func InitDatabase() (*sql.DB, error) {
 87     //将数据转换成数据库url作为返回值
 88     url := strings.Join([]string{"root", ":", "root", "@tcp(", "127.0.0.1", ":", "3306", ")/", "xu"}, "")
 89     db, err := sql.Open("mysql", url)
 90     if err != nil {
 91         log.Printf("open database error:%v", err)
 92         return nil, err
 93     }
 94     return db, nil
 95 }
 96 
 97 //执行增、改、删任务
 98 func Execute(db *sql.DB, sql string, params ...interface{}) error {
 99     stmt, _ := db.Prepare(sql) //预编译
100     defer stmt.Close()
101     _, err := stmt.Exec(params...)
102     if err != nil {
103         log.Printf("execute sql error:%v\n", err)
104         return err
105     }
106     log.Println("execute sql success")
107     return nil
108 }
109 
110 //查询数据库数据
111 func QueryData(db *sql.DB, sql string, params ...interface{}) (*sql.Rows, error) {
112     stmt, _ := db.Prepare(sql)
113     defer stmt.Close()
114     rows, err := stmt.Query(params...)
115     if err != nil {
116         log.Printf("query data error:%v", err)
117         return nil, err
118     }
119     log.Println("query data success")
120     return rows, nil
121 }

效果:

写入数据 

执行完毕后,前台输出

后台输出

猜你喜欢

转载自www.cnblogs.com/chaoyangxu/p/12171093.html