go 操作数据库

go 操作数据库需要下载各个数据库的驱动下面以关系型数据库mysql 和非关系型数据库redis 为例子讲解一下go 如何与数据库交互

下载数据库驱动

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

redis: go get github.com/garyburd/redigo/redis

连接mysql 代码demo

package growth

import (
    "database/sql"
    // 这儿使用_的意思是引入后面的包名而不直接使用这个包中定义的函数,变量等资源。
    _ "github.com/go-sql-driver/mysql"
    "fmt"
)

// golang 第十二天 学习 go 数据库编程(mysql)

/*
db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态。

db.Query()函数用来直接执行Sql返回Rows结果。

stmt.Exec()函数用来执行stmt准备好的SQL语句

 */

func Day12DBHandler()  {
    /*
    CREATE TABLE `userinfo` (
    `uid` INT(10) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(64) NULL DEFAULT NULL,
    `department` VARCHAR(64) NULL DEFAULT NULL,
    `created` DATE NULL DEFAULT NULL,
    PRIMARY KEY (`uid`)
);
     */


    driverName := "mysql"
    connString := "root:123@tcp(192.168.1.55:3306)/golang"
    db, err := sql.Open(driverName, connString)
    if err != nil {
        fmt.Println("Connection Database Error", err)
        return
    }
    defer db.Close()
    update := "update userinfo set username=? where uid=?"
    // 编译sql
    stmt,e2 := db.Prepare(update)

    if e2 != nil {
        fmt.Println("Prepare error, ", e2)
        return
    }

    // 执行sql
    result, e3 := stmt.Exec(1, "2018-07-01")
    if e3 != nil {
        fmt.Println("Excute Error, ", e3)
        return
    }else {
        fmt.Println(result.LastInsertId())
    }

    query := "SELECT * FROM userinfo"

    queryResult, e4 := db.Query(query)

    if e4 != nil {
        fmt.Println("Query Error, ", e4)
        return
    }

    for queryResult.Next() {
        var uid int
        var username string
        var department string
        var created string
        err = queryResult.Scan(&uid, &username, &department, &created)
        fmt.Println(uid)
        fmt.Println(username)
        fmt.Println(department)
        fmt.Println(created)
    }

    query2 := "SELECT * FROM user"

    user, e5 := db.Query(query2)

    if e5 != nil {
        fmt.Println("Query user error", e5)
    }

    for user.Next() {
        var id int
        var account string
        var encryption string
        var agentId string
        var createTime int
        var updateTime  int
        var isDeleted  bool

        e6 := user.Scan(&id, &account, &encryption, &agentId, &createTime, &updateTime, &isDeleted)

        if e6 != nil {
            fmt.Println("Scan Error: ,", e6)
            return
        }

        fmt.Println(id, account, encryption, agentId, createTime, updateTime, isDeleted)
    }
}

需要注意的是我们下载了golang的mysql驱动但是我们并没有直接调用它提供的接口或者说方法,这里我们只将其import了 导入时MySQL的驱动会进行一些初始化的操作,而我们需要的就是这些初始化的操作

连接redis 代码demo


package growth

// 学习go 第十四天 学习使用go 连接noSql 操作

import (
    "github.com/garyburd/redigo/redis"
    "fmt"
)

const (
    RDCONN = "192.168.1.55:6379"
    PROTOCOL = "tcp"
)
// redis ====================================================================
func Day14Redis()  {
    // 连接redis
    conn, err := redis.Dial(PROTOCOL, RDCONN)

    if err != nil {
        fmt.Println("Conn Redis Err", RDCONN)
        return
    }
    defer conn.Close()

    // 设置数据 Do 里面 使用GET或者是SET或者是其他redis的命令
    _, e2 := conn.Do("SET", "username", "root")
    if e2 != nil {
        fmt.Println("Set Err", e2)
    }
    // GET的时候返回的是数组,需要转为string 才是我们需要的数据
    data, e3 := redis.String(conn.Do("GET", "username"))

    if e3 != nil {
        fmt.Println("Get Err", e3)
    }
    fmt.Println(data)

}

操作reids 时 使用Do 方法来进行get 或者set 等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值