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 }
效果:
写入数据
执行完毕后,前台输出
后台输出
原文:https://www.cnblogs.com/chaoyangxu/p/12171093.html