暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Go MySQl增删改查

小明的编程笔记 2021-07-28
623
Go 语言提供的三方包MySQL查询和数据更新操作执行很简单,就是query和Exec,今天简单的封装数据库连接和增删改查。
package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)

var (
    driverName string = "mysql"
    user string = "wukong"
    password string = "_"
    host string = "192.168.200.49"
    port int = 3306
    database string = "wukong"
    charset string = "utf8"
)

func connect() *sqlx.DB {
    dsnString := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", user, password, host, port, database, charset)
    Db, err := sqlx.Open("mysql", dsnString)
    if err != nil {
        fmt.Printf("mysql connect failed, detail is [%v]", err.Error())
    }
    return Db
}

func queryData(Db *sqlx.DB, sql string) {
    rows, err := Db.Query(sql)
    if err != nil {
        fmt.Printf("query faied, error:[%v]", err.Error())
        return
    }
    for rows.Next() {
        //定义变量接收查询数据
        var id,orderAddTime int
        var accountId string

        err := rows.Scan(&id, &accountId, &orderAddTime)
        if err != nil {
            fmt.Println("get data failed, error:[%v]", err.Error())
        }
        fmt.Println(id, accountId, orderAddTime)
    }

    //关闭结果集(释放连接)
    rows.Close()
}

func updateExec(Db *sqlx.DB, sql string) {
    // result, err := Db.Exec(sql)
    _, err := Db.Exec(sql)
    if err != nil {
        fmt.Printf("data updateExec faied, error:[%v]", err.Error())
    }
    fmt.Printf("data updateExec success\n")
    // fmt.Println("type:", reflect.TypeOf(result))
}

func main() {
    var Db *sqlx.DB = connect()
    defer Db.Close()
    println("连接成功")

    var sql string = "select id,accountId,orderAddTime from om_unshipped_order limit 3"
    queryData(Db,sql)
    var sqlUpdate string = "update om_unshipped_order set orderAddTime=123456 where id=200246305"
    updateExec(Db,sqlUpdate)
    println("")
    sql = "select id,accountId,orderAddTime from om_unshipped_order where id=200246305"
    queryData(Db,sql)
    println("end")
}
复制
执行结果:
连接成功
200246305 6637 1627398450
200246306 580 1521452249
200246307 580 1528169500
data updateExec success
200246305 6637 123456

end
复制
代码比较简单,就是连接MySQL和执行查询和更新数据的操作。在学习过程中遇到2个难点,没有达到想要的结果,希望后面有时间解决。
  1. 我们应该把 Db 看成一个对象,使用Db.queryData(sql)
    的方式更方面和符合习惯
  2. updateExec中 Db.Exec 执行结果 result 对于insert 、update、delete有不同的返回值,比如insert的数据ID,update影响行数等。但是我不知道 updateExec 的返回类型 result 应该是什么,百度寻找答案有的是说使用反射 reflect.TypeOf(result)
    ,但是我发现打印的类型不能作为返回结果。

【END】
文章转载自小明的编程笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论