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
}

 

posted @ 2018-10-01 08:58  温柔的风  阅读(118)  评论(0编辑  收藏  举报