golang mysql多语句查询及调用存储过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cexo425/article/details/78456232

之前的golang版本,由于sql标准库不支持多结果集的返回,所以也就影响了存储过程,那时候只能调用插入和更新类的存储过程,即db.exec(“call function_name”), 从golang 1.8开始,支持多结果集, https://blog.gopheracademy.com/advent-2016/database_sql/

package main

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



func main() {
    db, err := sql.Open("mysql", "root:root@/test?multiStatements=true")
    if err != nil {
        log.Println(err)
    }

    defer db.Close()

    err = db.Ping()

    if err != nil {
        log.Println(err.Error())
    }





    rows, err := db.Query(`
    select username from users limit 0, 10;
    select uuid from users limit 0, 10;`)

    if err != nil {
        log.Print(err.Error())
    }
    defer rows.Close()
    for rows.Next() {
        name := ""
        rows.Scan(&name)
        fmt.Println(name)
    }

    if !rows.NextResultSet() {
        log.Fatal("expected more result sets", rows.Err())
    }
    for rows.Next() {
        uuid := ""
        rows.Scan(&uuid)
        fmt.Println(uuid)
    }

    rows, err = db.Query(`call id_users(?)`, 10)
    if err != nil {
        log.Print(err)
    }
    for rows.Next() {
        name := ""
        rows.Scan(&name)
        fmt.Println(name)
    }

}

猜你喜欢

转载自blog.csdn.net/cexo425/article/details/78456232