Go語言針對MySQL資料查詢的錯誤處理方式

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
// Go語言針對MySQL資料查詢的錯誤處理方式package mainimport (    "database/sql"    "fmt"    "runtime")// go run test.gofunc main() {    // mysql擴充 https://github.com/go-sql-driver/mysql    db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?charset=utf8")    if err != nil {        fmt.Println(err)    }    // db串連一般不主動關閉, 除非確認確實不再需要該串連了, go會進行回收    defer db.Close()        // 使用者模型, 表結構, 需要一個結構來接收查詢結果集    type User struct {        Id int32        Name string        Age int8    }        // 儲存使用者資訊列表    var user User        // 1、查詢一系列值    // Query結果集需要調用Next()方法進行逐條遍曆    rows, err := db.Query(`        SELECT id,name,age FROM user    `)    if err != nil {        fmt.Println(err)    }    defer rows.Close()    for rows.Next() {        // 對於遍曆, 只需要判斷每次是否有錯誤產生即可        // 參數綁定需要數量和位置一一對應        if err := rows.Scan(&user.Id, &user.Name, &user.Age); err != nil {            fmt.Println(err)            continue        }        fmt.Println(user.Id, user.Name, user.Age)    }    // 處理完畢後, 需要在判斷一次遍曆過程中是否有錯誤產生    if err := rows.Err(); err != nil {        fmt.Println(err)    }        // 2、查詢一條記錄    // 查詢一條記錄時, 不能使用類似if err := db.QueryRow().Scan(&...); err != nil {}的處理方式    // 因為查詢單條資料時, 可能返回var ErrNoRows = errors.New("sql: no rows in result set")該種錯誤資訊    // 而這屬於正常錯誤    err = db.QueryRow(`        SELECT id,name,age WHERE id = ?    `, 2).Scan(        &user.Id, &user.Name, &user.Age,    )    switch {    case err == sql.ErrNoRows:    case err != nil:        // 使用該方式可以列印出運行時的錯誤資訊, 該種錯誤是編譯時間無法確定的        if _, file, line, ok := runtime.Caller(0); ok {            fmt.Println(err, file, line)        }    }    fmt.Println(user.Id, user.Name, user.Age)        // 3、關於NULL    // 所有查詢出來的欄位都不允許有NULL, 避免該方式最好的辦法就是建表欄位時, 不要設定類似DEFAULT NULL屬性    // 還有一些無法避免的情況, 比如下面這個查詢    // 該種查詢, 如果不存在, 傳回值為NULL, 而非0, 針對該種簡單的查詢, 直接使用HAVING子句即可    // 具體的查詢, 需要在編碼的過程中自行處理    var age int32    err = db.QueryRow(`        SELECT            SUM(age) age        FROM user        WHERE id = ?        HAVING age <> NULL    `, 10).Scan(&age)    switch {    case err == sql.ErrNoRows:    case err != nil:        fmt.Println(err)    }    fmt.Println(age)}

聯繫我們

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