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

  • 相关阅读:
    Java_swing控件实例
    java_泛型 TreeSet 判断hashcode/length(升序排列)
    java_泛型(设置通配符下限)
    java_泛型(构造器)部分实例
    子类可以继承的同时实现接口
    继承类的线程写法
    匿名内部类的线程写法
    接口作为参数并用参数变量可以调用接口中的方法------------------需要多练习
    类可以作为参数类型,参数的变量还能调用作为参数类型的方法--------------需要多练习
    接口和类
  • 原文地址:https://www.cnblogs.com/foxcharon/p/8961412.html
Copyright © 2011-2022 走看看