zoukankan      html  css  js  c++  java
  • go : 连接数据库并插入数据

     
    package main
    import (
    	"database/sql"
    	"fmt"
    	"log"
    	"net/http"
    	"reflect"
    	"strings"
    	_ "github.com/go-sql-driver/mysql"	
    )
    func sayhelloName(w http.ResponseWriter, r *http.Request) {
    	r.ParseForm()       //解析参数,默认是不会解析的
    	fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
    	fmt.Println("path", r.URL.Path)
    	fmt.Println("scheme", r.URL.Scheme)
    	fmt.Println(r.Form["url_long"])
    	fmt.Println("type:", reflect.TypeOf(r))
    	//	printData(r)
    	fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的
    	var ret int
    	ret = max(1, 2)
    	fmt.Printf("最大值是 : %d
    ", ret)
    	dbFun(r)
    }
    func main() {
    	http.HandleFunc("/hello", sayhelloName)  //设置访问的路由
    	err := http.ListenAndServe(":9091", nil) //设置监听的端口
    	if err != nil {
    		log.Fatal("ListenAndServe: ", err)
    	}
    }
    func max(num1, num2 int) int {
    	/* 定义局部变量 */
    	var result int
    	if num1 > num2 {
    		result = num1
    	} else {
    		result = num2
    	}
    	return result
    }
    func printData(a *http.Request) {
    	//	fmt.Println("num", a)
    	var str string
    	fmt.Println(a.Form)
    	fmt.Println(a.Form["name"])
    	str = string(a.Form["name"][0])
    	fmt.Println(str)
    	for k, v := range a.Form {
    		fmt.Println("key:", k)
    		fmt.Println("val:", strings.Join(v, ""))
    	}
    }
    func dbFun(a *http.Request) {
    	fmt.Println("===database===")
    	//初始化数据库信息,此时就是一个数据库连接池
    	db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
    	fmt.Println("type2:", reflect.TypeOf(db))
    	IsErr(err)
    	//封装SQL指令
    	stmt, err := db.Prepare("INSERT hello SET name=?,age=?")
    	IsErr(err)
    	//执行影响指令	
    	var balance [2]string
    	balance[0] = a.Form["name"][0]
    	balance[1] = a.Form["age"][0]
    	result, err := stmt.Exec(balance[0], balance[1])
    	IsErr(err)
    	fmt.Print(result.RowsAffected())
    	defer stmt.Close()
    	defer db.Close()
    }
    func IsErr(err error) {
    	if err != nil {
    		fmt.Println("程晗错误:%s", err)
    	}
    }
    

      

    然后浏览器访问 http://localhost:9091/hello ,就可以插入数据了。

    比如用Postman提交数据:

    关于数据类型:

      *http.Request 的数据类型就是 *http.Request(指针),直接照着传过去就行了。

    为什么是a.Form["name"][0]?

      因为post传上来的数据的结构是这样的:

    参考:

    https://studygolang.com/articles/5269

    https://www.cnblogs.com/zhja/p/5604553.html

  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/foxcharon/p/8961412.html
Copyright © 2011-2022 走看看