go語言基礎 鏈接MySQL

插入操作:
step1:導包
"database/sql"
_ "github.com/go-sql-driver/mysql"
step2:打開數據庫,建立連接
db,_:=sql.Open("mysql","root:xxx@tcp(127.0.0.1:3306)/my1802?charset=utf8") // xxx是密碼
step3:操作數據庫:
stmt_:=db.Prepare("sql .... ?,?")
result,_:=stmt.Exec(給?賦值)
step4:操作結果對象
result.LastIndexId()-->int64
result.RowsAffected()-->int64
step5:關閉資源
stmt.Close()

db.Close()

package main
// step1:導入包
import (
   "database/sql"
   _"github.com/go-sql-driver/mysql"
   "fmt"
)

func main()  {
   // step2:打開數據庫,相當於和數據庫建立連接:db對象
   /*
   func Open(driverName, dataSourceName string) (*DB, error)
   drvierName,"mysql"
   dataSourceName,用戶名:密碼@協議(地址:端口)/數據庫?參數=參數值
    */
   db,err:=sql.Open("mysql","root:hanru1314@tcp(127.0.0.1:3306)/my1802?charset=utf8")
   if err !=nil{
      fmt.Println("連接失敗。。")
      return
   }
   //step3:插入一條數據

   stmt,err:=db.Prepare("INSERT INTO emp(empno,ename,job,hiredate,sal) values(?,?,?,?,?)")
   if err !=nil{
      fmt.Println("操作失敗。。")
   }
   //補充完整sql語句,並執行
   result,err:=stmt.Exec(9530,"小鑽風","巡山","2018-04-21",30.8)
   if err !=nil{
      fmt.Println("插入數據失敗。。")
   }
   //step4:處理sql操作後的結果
   lastInsertId,err:=result.LastInsertId()
   rowsAffected,err:=result.RowsAffected()
   fmt.Println("lastInsertId",lastInsertId)
   fmt.Println("影響的行數:", rowsAffected)


   //再次插入數據:
   result,_=stmt.Exec(9531,"白骨精","巡山","2017-11-11",50.8)
   count,_:=result.RowsAffected()
   fmt.Println("影響的行數:",count)




   //step5:關閉資源
   stmt.Close()
   db.Close()


}

查詢數據庫:DQL語言
step1:同上,導入包
step2:同上,建立連接
step3:查詢
rows,err:=db.Query("select....",佔位符的替換的值)
step4:處理查詢到的數據
rows.Colums()-->查詢到的字段的名字 []string
rows.Next()-->bool,判斷是否有下一個數值
rows.Scan(&變量名,&....)

package main
//step1:導入包
import (
   "database/sql"
   _ "github.com/go-sql-driver/mysql"
   "fmt"
)
type Emp struct {
   Empno int
   Ename string
   Job string
   Hiredate string
   Sal float64
   Deptno int
}

func main()  {
   /*
   查詢操作:
    */
   //step2:打開數據庫,建立連接
   db,_ := sql.Open("mysql","root:hanru1314@tcp(127.0.0.1:3306)/my1802?charset=utf8")

   //stpt3:查詢數據庫
   rows,err:=db.Query("SELECT empno,ename,job,hiredate,sal,deptno FROM emp WHERE deptno=?",30)
   fmt.Println("--->",err.Error())
   fmt.Println(rows.Columns()) //[empno ename job hiredate sal deptno]
   //思路一:定義一個map,用於存儲從數據庫中查詢出來的數據,字段作爲key,string,數據作爲value,任意類型,空接口
   map1:=make(map[string]interface{})
   datas := make([] map[string]interface{},0)

   //思路二:創建slice,存入struct,
   datas2:=make([] Emp,0)
   //step4:操作結果集獲取數據
   for rows.Next(){
      var empno int
      var ename string
      var job string
      var hiredate string
      var sal float64
      var deptno int
      if err:=rows.Scan(&empno,&ename,&job,&hiredate,&sal,&deptno);err!=nil{
         fmt.Println("獲取失敗。。")
      }
      //fmt.Println(empno,ename,job,hiredate,sal,deptno)
      //將讀取到的數據,存入了map中
      map1["empno"]=empno
      map1["ename"]=ename
      map1["job"]=job
      map1["hiredate"]=hiredate
      map1["sal"]=sal
      map1["deptno"]=deptno
      //將map存入切片中
      datas = append(datas,map1)


      //思路二:每讀取一行,創建一個emp對象,存入datas2中
      emp := Emp{empno,ename,job,hiredate,sal,deptno}
      datas2 =append(datas2, emp)
   }
   //step5:關閉資源
   rows.Close()
   db.Close()

   //遍歷切片
   //fmt.Println("empno\tename\tjob\thiredate\tsal\tdeptno")
   //for _,v:=range datas{
   // for _,val:=range v{
   //    fmt.Print(val,"\t")
   //}
   //fmt.Println()
   //
   //}

   for _,v:=range  datas2{
      fmt.Println(v)
   }


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章