Mysql的Go語言驅動--Go-MySQL-Driver的使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。


一、特性

  • 輕量級與快速
  • 原生Go語言,沒有C綁定,只有純Go
  • 沒有不安全的操作(類型轉換等)
  • 動態處理崩潰的串連
  • 動態串連池
  • 支援大於16MB的查詢
  • 完全 sql.RawBytes支援


二、安裝

簡單地使用 go tool 在shell中把安裝包加到你的$GOPATH

1 $gogetgithub.com/go-sql-driver/mysql

也可以將下載原始碼,然後放到項目中,下載地址如下

github地址https://github.com/go-sql-driver/mysql,官網地址 http://godoc.org/github.com/go-sql-driver/mysql



三、使用

sql包的用法簡潔明了:
1、建立串連

建立串連有以下幾種方法:

user@unix(/path/to/socket)/dbname?charset=utf8user:password@tcp(localhost:5555)/dbname?charset=utf8user:password@/dbnameuser:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname第2種方法是最常用的方法。例如:db, err := sql.Open("mysql", "user:password@tcp(localhost:5555)/dbname?charset=utf8")db 是一個*sql.DB類型的指標,在後面的操作中,都要用到db,err是錯誤資訊,如果為空白(nil)說明串連成功,charset設定字元集。2、基本用法插入操作 db, err := db.Prepare(`INSERT user (name,age,sex) values (?,?,?)`)checkErr(err)res, err := db.Exec("tony", 20, 1)checkErr(err)id, err := res.LastInsertId()checkErr(err)fmt.Println(id)這裡使用結構化操作,不推薦使用直接拼接sql語句的方法。查詢操作rows, err := db.Query("SELECT * FROM user")checkErr(err) for rows.Next() {    var id int    var name string    var age int    var sex int    rows.Columns()    err = rows.Scan(&id, &name, &age, &sex)    checkErr(err)    fmt.Println(id)    fmt.Println(name)    fmt.Println(age)    fmt.Println(sex)}這裡查詢的方式使用聲明4個獨立變數id、name、age、sex來儲存查詢出來的每一行的值。在實際開發中通常會封裝資料庫的操作,對這樣的查詢通常會考慮返回字典類型。//構造scanArgs、values兩個數組,scanArgs的每個值指向values相應值的地址columns, _ := rows.Columns()scanArgs := make([]interface{}, len(columns))values := make([]interface{}, len(columns))for i := range values {    scanArgs[i] = &values[i]} for rows.Next() {    //將行資料儲存到record字典    err = rows.Scan(scanArgs...)    record := make(map[string]string)    for i, col := range values {        if col != nil {            record[columns[i]] = string(col.([]byte))        }    }    fmt.Println(record)}修改操作stmt, err := db.Prepare(`UPDATE user SET age=?,sex=? WHERE id=?`)checkErr(err)res, err := stmt.Exec(21, 2, 1)checkErr(err)num, err := res.RowsAffected()checkErr(err)fmt.Println(num)刪除操作stmt, err := db.Prepare(`DELETE FROM user WHERE id=?`)checkErr(err)res, err := stmt.Exec(1)checkErr(err)num, err := res.RowsAffected()checkErr(err)fmt.Println(num) 完整代碼修改和刪除操作都比較簡單,同插入資料類似,只是使用RowsAffected來擷取影響的資料行數。package main import (    "database/sql"    "fmt"    _ "github.com/go-sql-driver/mysql") func main() {    insert()} //插入demofunc insert() {    db, err := sql.Open("mysql", "root:@/test?charset=utf8")    checkErr(err)     stmt, err := db.Prepare(`INSERT user (name,age,sex) values (?,?,?)`)    checkErr(err)    res, err := stmt.Exec("tony", 20, 1)    checkErr(err)    id, err := res.LastInsertId()    checkErr(err)    fmt.Println(id)} //查詢demofunc query() {    db, err := sql.Open("mysql", "root:@/test?charset=utf8")    checkErr(err)     rows, err := db.Query("SELECT * FROM user")    checkErr(err)      //字典類型    //構造scanArgs、values兩個數組,scanArgs的每個值指向values相應值的地址    columns, _ := rows.Columns()    scanArgs := make([]interface{}, len(columns))    values := make([]interface{}, len(columns))    for i := range values {        scanArgs[i] = &values[i]    }     for rows.Next() {        //將行資料儲存到record字典        err = rows.Scan(scanArgs...)        record := make(map[string]string)        for i, col := range values {            if col != nil {                record[columns[i]] = string(col.([]byte))            }        }        fmt.Println(record)    }} //更新資料func update() {    db, err := sql.Open("mysql", "root:@/test?charset=utf8")    checkErr(err)     stmt, err := db.Prepare(`UPDATE user SET age=?,sex=? WHERE id=?`)    checkErr(err)    res, err := stmt.Exec(21, 2, 1)    checkErr(err)    num, err := res.RowsAffected()    checkErr(err)    fmt.Println(num)} //刪除資料func remove() {    db, err := sql.Open("mysql", "root:@/test?charset=utf8")    checkErr(err)     stmt, err := db.Prepare(`DELETE FROM user WHERE 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)    }}
   
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.