go连接mysql

shell终端安装 go-mysql包:

go get -u github.com/go-sql-driver/mysql

以下代码可以在我的阿里云正常执行:

// go-mysql.go

package main
import "database/sql"
import _ "github.com/go-sql-driver/mysql"

import (
    "fmt"
    "strings"
)

//数据库配置
const (
    userName = "root"
    password = "******"
    ip = "127.0.0.1"
    port = "3306"
    dbName = "userDB"
)
//Db数据库连接池
var DB *sql.DB

func main() {
    InitDB()
    InsertUser()
    SelectUserById(1)
}


//注意方法名大写,就是public
func InitDB()  {
    //构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
    path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")

    //打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
    DB, _ = sql.Open("mysql", path)
    //设置数据库最大连接数
    DB.SetConnMaxLifetime(100)
    //设置上数据库最大闲置连接数
    DB.SetMaxIdleConns(10)
    //验证连接
    if err := DB.Ping(); err != nil{
        fmt.Println("open database fail")
        return
    }
    fmt.Println("connnect success")
}

func InsertUser() (bool){
    //开启事务
    tx, err := DB.Begin()
    if err != nil{
        fmt.Println("tx fail")
        return false
    }
    //准备sql语句
    stmt, err := tx.Prepare("INSERT INTO user_test (`name`) VALUES (?)")
    if err != nil{
        fmt.Println("Prepare fail")
        return false
    }
    //将参数传递到sql语句中并且执行
    res, err := stmt.Exec("张四")
    if err != nil{
        fmt.Println("Exec fail")
        return false
    }
    //将事务提交
    tx.Commit()
    //获得上一个插入自增的id
    fmt.Println(res.LastInsertId())
    return true
}


func SelectUserById(id int) () {

    rows,err := DB.Query("SELECT id,name FROM user_test WHERE id = ? ", id)

    if err != nil{
        fmt.Println("查询出错了")
    }

    //获取列名
    columns, _ := rows.Columns()

    //定义一个切片,长度是字段的个数,切片里面的元素类型是sql.RawBytes
    values := make([]sql.RawBytes, len(columns))
    //定义一个切片,元素类型是interface{} 接口
    scanArgs := make([]interface{}, len(values))
    for i := range values {
        //把sql.RawBytes类型的地址存进去了
        scanArgs[i] = &values[i]
    }
    //获取字段值
    var result []map[string]string
    for rows.Next() {
        res := make(map[string]string)
        rows.Scan(scanArgs...)
        for i, col := range values {
            res[columns[i]] = string(col)
        }
        result = append(result, res)
    }

    //遍历结果
    for _, r := range result {
        for k, v := range r {
            fmt.Printf("%s==%s", k, v)
        }
    }
    rows.Close()
}

执行代码,输出:

[root@aliyun go]# go run go-mysql.go
connnect success
4 <nil>
id==1name==张三

你可能感兴趣的:(技术)