Go語言 Web開發(6)使用GO串連MySQL資料庫操作

來源:互聯網
上載者:User

我們使用 https://github.com/Go-SQL-Driver/MySQL 作為Go串連MySQL的驅動,進行資料庫操作練習。

(1)匯入資料庫驅動

import (   _"github.com/Go-SQL-Driver/MySQL")

這裡使用 _ 的意思是引入後面的包名而不直接使用這個包中定義的函數,變數等資源。若出現無法匯入的情況,我們可以使用以下方式解決(以 window系統為例)

windows+R 開啟cmd,輸入go get github.com/vmihailenco/redis ,斷行符號之後會自動下載項目到GOPATH中的src目錄下,然後重新整理IDE。

(2)資料庫連接
使用 sql.Open 用來開啟一個註冊過的資料庫驅動,這裡有幾種串連方式,如下所示,一般我們選用第二種方式

user@unix(/path/to/socket)/dbname?charset=utf8user:password@tcp(localhost:3306)/dbname?charset=utf8user:password@/dbnameuser:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

(3)增刪改查操作

package mainimport (   "database/sql"   "fmt"   _"github.com/Go-SQL-Driver/MySQL")var(   DBHostsIp  = "localhost:3306"   DBUserName = "root"   DBPassWord = "123456"   DBName     = "localmysql")func main(){   //串連至資料庫   db,err := sql.Open("mysql", DBUserName+":"+DBPassWord+"@tcp("+DBHostsIp+")/"+DBName)   CheckErr(err)   insert(db)   //關閉資料庫連接   db.Close()}//插入demofunc insert(db *sql.DB)  {   //準備插入操作   stmt,err := db.Prepare("INSERT user (user_name,user_age,user_sex) values (?,?,?)")   CheckErr(err)   //執行插入操作   res,err := stmt.Exec("limao",26,2)   CheckErr(err)   //返回最近的自增主鍵id   id,err := res.LastInsertId()   fmt.Println("LastInsertId: ",id)}//查詢demofunc query(db *sql.DB)  {   //rows:返回查詢操作的結果集   rows,err := db.Query("SELECT * FROM user")   CheckErr(err)   //第一步:接收在資料庫表查詢到的欄位名,返回的是一個string數組切片   columns, _ := rows.Columns() // columns:  [user_id user_name user_age user_sex]   //根據string數組切片的長度構造scanArgs、values兩個數組,scanArgs的每個值指向values相應值的地址   scanArgs := make([]interface{}, len(columns))   values := make([]interface{}, len(columns))   for i := range values {      scanArgs[i] = &values[i]   }   for rows.Next() {      //將查詢到的欄位名的地址複製到scanArgs數組中      err = rows.Scan(scanArgs...)      CheckErr(err)      //將行資料儲存到record字典      record := make(map[string]string)      for i, col := range values {         if col != nil {            //欄位名 = 欄位資訊            record[columns[i]] = string(col.([]byte))         }      }      fmt.Println(record)   }}//更新demofunc update(db *sql.DB)  {   //準備更新操作   stmt1,err := db.Prepare("UPDATE user SET user_age=?,user_sex=? WHERE user_id=?")   CheckErr(err)   //執行更新操作   res1, err := stmt1.Exec(21, 2, 1)   CheckErr(err)   //查詢更新多少條資訊   num, err := res1.RowsAffected()   CheckErr(err)   fmt.Println(num)}//刪除demofunc remove(db *sql.DB)  {   //準備刪除操作   stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)   CheckErr(err)   //執行刪除操作   res, err := stmt.Exec(1)   CheckErr(err)   //查詢刪除多少條資訊   num, err := res.RowsAffected()   CheckErr(err)   fmt.Println(num)}//檢查錯誤資訊func CheckErr(err error)  {   if err != nil {      panic(err)   }}

總結:
db.Prepare()函數用來返回準備要執行的sql操作,然後返回準備完畢的執行狀態。
db.Query()函數用來直接執行Sql返回Rows結果。
stmt.Exec()函數用來執行stmt準備好的SQL語句。
我們可以看到我們傳入的參數都是=?對應的資料,這樣做的方式可以一定程度上防止SQL注入。

參考文章:http://www.01happy.com/golang-mysql-demo/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.