• Golang原生sql操作Mysql数据库增删改查


    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用。

    首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动,下载完成之后会在GOPATH下的src/github.com目录下

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

    然后本地的mysql服务要启动,并创建一个表作为测试

    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
      `age` tinyint(4) DEFAULT '0',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

    连接mysql数据库,导入mysql驱动包,并使用datebase/sql Open函数进行连接

    //mysql数据库,用户名:密码@tcp连接:端口3306/test库?字符集utf8
    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") //返回连接字符,和err

    代码

    package main
    
    import (
        "database/sql" // 这是一个抽象层包,比如区分mysql、orcal等数据库,只有这个包是连接不上mysql的,还需要搭配下面的mysql包
        "fmt"
    
        _ "github.com/go-sql-driver/mysql" //导入mysql驱动包
    )
    
    func init() {
    
    }
    
    func main() {
        //mysql数据库,用户名:密码@tcp连接:端口3306/test库?字符集utf8
        db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") //返回连接字符,和err
        if err != nil {
            panic(err)
        }
        //增加数据
            stmt, err := db.Prepare(`INSERT student (name,age) values (?,?)`)
            res, err := stmt.Exec("wangwu", 26)
            id, err := res.LastInsertId()
            fmt.Println("自增id=", id)
        //修改数据
            stmt, err := db.Prepare(`UPDATE student SET age=? WHERE id=?`)
            res, err := stmt.Exec(21, 5)
            num, err := res.RowsAffected() //影响行数
            fmt.Println(num)
        //删除数据
            stmt, err := db.Prepare(`DELETE FROM student WHERE id=?`)
            res, err := stmt.Exec(5)
            num, err := res.RowsAffected()
            fmt.Println(num)
        //查询数据
        rows, err := db.Query("SELECT * FROM student")
    
        //--------简单一行一行输出---start
        //    for rows.Next() { //满足条件依次下一层
        //        var id int
        //        var name string
        //        var age int
        //        rows.Columns()
    
        //        err = rows.Scan(&id, &name, &age)
        //        fmt.Println(id)
        //        fmt.Println(name)
        //        fmt.Println(age)
        //    }
        //--------简单一行一行输出---end
    
        //--------遍历放入map----start
        //构造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)
        }
        //--------遍历放入map----end
    }
  • 相关阅读:
    数组列简介
    linq的使用
    StringBuilder对象
    使用类来继承接口
    设置函数库并引用
    循环语句
    cut和paste用法
    uniq用法
    shell中数组的应用
    委派
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9734042.html
Copyright © 2020-2023  润新知