好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Golang 數據庫操作(sqlx)和不定字段結果查詢

Golang 數據庫操作(sqlx)和不定字段結果查詢

熱門標簽:電腦外呼系統輻射大嗎 揚州電銷外呼系統軟件 400手機電話免費辦理 百度地圖標注位置網站 如何利用高德地圖標注家 智能語音電銷的機器人 上海企業外呼系統排名 開通400電話申請流程 武漢百應人工智能電銷機器人

一、Mysql數據庫

為什么要使用數據庫

  • 一開始人手動記錄數據,不能長期保存,追溯;
  • 然后創建了文件系統,能夠長期保存,但是查詢追溯更新麻煩,數據可以發生冗余重復;
  • 實現了數據庫的方式,能夠長期保存,方便查詢,追溯,更新等等一系列操作,能設置一些約束進行數據的自我管控等等。

簡單介紹下Mysql數據庫的特點:關系型數據庫、體積小、速度快、成本低、開源代碼、中小網站適用、非常適合初學者學習

二、Golang操作Mysql

1. 現有test數據庫表格user

2. 連接mysql數據庫

2.1. 使用到的第三方庫

github.com/go-sql-driver/mysql(驅動)

github.com/jmoiron/sqlx(對驅動的操作封裝)

2.2. 連接

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
)

func main() {
   db, err := sqlx.Open("mysql", "username:password@(127.0.0.1:3306)/test?charset=utf8mb4")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5) //設置最大的空閑數
   db.SetMaxOpenConns(15) //設置最大的連接數
}

  //db, err := sqlx.Open("數據庫類型", "用戶名:密碼@tcp(地址:端口)/數據庫名")

3. SELECT數據庫查詢操作

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func initDB() {
   var err error
   db, err = sqlx.Open("mysql", "username:password@(127.0.0.1:3306)/test?charset=utf8mb4parseTime=trueloc=Local")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5)
   db.SetMaxOpenConns(15)
}

type User struct {
   Id   int64  `db:"id"`
   Name string `db:"name"`
   Age  int64  `db:"age"`
   Sex  string `db:"sex"`
}

func main() {
   initDB()
   defer db.Close()

   var user []User
   sqlStr := "SELECT * FROM user"
   err := db.Select(user, sqlStr)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(user)
}

得到結果->

[{1 張三 20 男} {2 李四 21 女} {3 王五 25 男}]

4. Insert數據庫插入操作

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func initDB() {
   var err error
   db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5)
   db.SetMaxOpenConns(15)
}

type User struct {
   Id   int64  `db:"id"`
   Name string `db:"name"`
   Age  int64  `db:"age"`
   Sex  string `db:"sex"`
}

func main() {
   initDB()
   defer db.Close()

   var user = User{
      Name: "小六",
      Age: 18,
      Sex: "女",
   }

   sqlStr := "INSERT INTO user(name, age, sex) VALUES (?,?,?)"
   res, err := db.Exec(sqlStr, user.Name, user.Age, user.Sex)
   if err != nil {
      fmt.Println(err)
   }
   c, _ := res.RowsAffected()
   fmt.Println("有多少行被創建", c)
}

得到結果->

有多少行被創建 1

5. Update數據庫更新操作

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func initDB() {
   var err error
   db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5)
   db.SetMaxOpenConns(15)
}

type User struct {
   Id   int64  `db:"id"`
   Name string `db:"name"`
   Age  int64  `db:"age"`
   Sex  string `db:"sex"`
}

func main() {
   initDB()
   defer db.Close()

   var user = User{
      Id: 4,
      Age: 20,
   }

   sqlStr := "UPDATE user SET age=? WHERE id=?"
   res, err := db.Exec(sqlStr, user.Age, user.Id)
   if err != nil {
      fmt.Println(err)
   }
   c, _ := res.RowsAffected()
   fmt.Println("有多少行被更改", c)
}

得到結果->

有多少行被更改 1

6. DELETE數據庫刪除操作

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func initDB() {
   var err error
   db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5)
   db.SetMaxOpenConns(15)
}

type User struct {
   Id   int64  `db:"id"`
   Name string `db:"name"`
   Age  int64  `db:"age"`
   Sex  string `db:"sex"`
}

func main() {
   initDB()
   defer db.Close()

   deleteId := 3

   sqlStr := "DELETE FROM user WHERE id=?"
   res, err := db.Exec(sqlStr, deleteId)
   if err != nil {
      fmt.Println(err)
   }
   c, _ := res.RowsAffected()
   fmt.Println("有多少行被刪除", c)
}

得到結果->

有多少行被刪除 1

三、生成動態字段數據庫查詢結果

在項目中經常會遇到一個問題:在同一個函數中,查詢不同的表格,生成不同的結果,每次都要重新構建結構體

思路:把結果弄成[]map[string]string類型,這樣就能把查詢得到的數據都填充進去。

使用的是內置的庫

database/sql

package main

import (
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
)

var db *sql.DB

func initDB() {
   var err error
   db, err = sql.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
   if err != nil {
      fmt.Println("open mysql failed,", err)
   }
   db.SetMaxIdleConns(5)
   db.SetMaxOpenConns(15)
}

func main() {
   initDB()
   defer db.Close()

   sqlStr := "SELECT * FROM user" //可以換成其它的查詢語句,可以得到相應的查詢結果,不用每次都去構建存放的結構體
   rows, err := db.Query(sqlStr)
   if err != nil {
      fmt.Println(err)
   }
   defer rows.Close()

   //列出所有查詢結果的字段名
   cols, _ := rows.Columns()

   //values是每個列的值,這里獲取到byte里
   values := make([][]byte, len(cols))
   //query.Scan的參數,因為每次查詢出來的列是不定長的,用len(cols)定住當次查詢的長度
   scans := make([]interface{}, len(cols))
   //讓每一行數據都填充到[][]byte里面
   for i := range values {
      scans[i] = values[i]
   }
   res := make([]map[string]string, 0)
   for rows.Next() {
      _ = rows.Scan(scans...)
      row := make(map[string]string)
      for k, v := range values { //每行數據是放在values里面,現在把它挪到row里
         key := cols[k]
         row[key] = string(v)
      }
      res = append(res, row)
   }
   fmt.Println(res)
}

得到結果->

[map[age:20 id:1 name:張三 sex:男] map[age:21 id:2 name:李四 sex:女] map[age:20 id:4 name:小六 sex:女]]

到此這篇關于Golang 數據庫操作(sqlx)和不定字段結果查詢的文章就介紹到這了,更多相關Golang 數據庫操作和不定字段結果查詢內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • Golang操作MySql數據庫的完整步驟記錄
  • 利用golang驅動操作MongoDB數據庫的步驟
  • golang常用庫之操作數據庫的orm框架-gorm基本使用詳解
  • 在golang中操作mysql數據庫的實現代碼
  • Golang對MongoDB數據庫的操作簡單封裝教程
  • golang實現mysql數據庫備份的操作方法

標簽:張掖 延邊 宜賓 江西 武漢 嘉峪關 黑龍江 新余

巨人網絡通訊聲明:本文標題《Golang 數據庫操作(sqlx)和不定字段結果查詢》,本文關鍵詞  Golang,數據庫,操作,sqlx,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang 數據庫操作(sqlx)和不定字段結果查詢》相關的同類信息!
  • 本頁收集關于Golang 數據庫操作(sqlx)和不定字段結果查詢的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 男人操女人的漫画| 亚洲欧美日韩国产一区图片| 日本一区免费看| 行者武松| 搡老女人ⅩXXX搡老女人录像| 老司机lsj精品视频在线观| 冠希实干阿娇13分钟视频高清| 免费看男人露jiji| 國產精品久久久久精品盜攝97 | 公与媳系列100集阅读目录小说| 黄色仓库hsck| 五月婷婷综合网| 色欲av人妻精品一区二区黑牛| 爱爱操| 中文字幕亲子入浴交尾剧情介绍| 伊人久久精品久久亚洲一区| 香港三日本三级人妇三级99| 试衣间大战极品美妇| 爱丫爱丫影院在线播放| 久久99精品国产麻豆婷婷 | 日木无遮羞教调屁股视频网站| 四川女人高潮一级毛片| 成人A片产无码免费视频奶头麻豆| 嗯啊白丝班长~腿别开C黄拔| 淫欲护士日记| 【总/攻】在龙傲天文里当反派| 性插动态图| 日韩另类小说| 爽?躁多水?快受不了了| 93女爱男欢电影| 喂不饱的荡货奶水h| 秋霞鲁丝电影| 久久精品人人做人人爽| 他扯掉她的内裤猛地挺进电影| 动漫大胸美女被揉胸| 国产一级在线现免费观看| 欲海娇妻第二部| 啊?日出水了?用力乖乖口述| 下面好紧…爽?小视频| 美女禁区无遮挡在线观看| 牲欲旺盛的女人高清在线|