Go学习笔记-使用MySQL数据库

2017-12-28 15:17:31 

 

Go中支持MySQL的使目前比较多,有如下几栽,有些是支撑database/sql标准,而有点是动了协调之落实接口,常
用的起如下几栽:

 

  1. https://github.com/Go-SQL-Driver/MySQL
    支持database/sql,全部运用go写。
  2. https://github.com/ziutek/mymysql
    支持database/sql,也支撑自定义的接口,全部下go写。
  3. https://github.com/Philio/GoMySQL
    不支持database/sql,自定义接口,全部利用go写。

 

对接下的例子主要以率先单让为例,也引进大家以它,主要理由:这个令比较新,维护的较好,完全支持database/sql接口
支持keepalive,保持增长连。

 

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/Go-SQL-Driver/MySQL"
    "os"
)

func checkErr(err error) {
    if err != nil {
        fmt.Println("Error is ", err)
        os.Exit(-1)
    }
}

// sql.Open()函数用于打开数据库驱动,Go-SQL-Driver中注册了mysql这个数据库驱动,第二个参数是DNS,配置数据库信息
// db.Prepare()函数用来返回准备要执行的sql操作,返回准备完毕状态
// db.Query() 函数用来直接执行Sql返回Rows结果
// stmt.Exec() 函数用来执行stmt准备好的SQL

func main() {
    // sql.Open("mysql", "用户名:密码@tcp(IP:端口)/数据库?charset=utf8")
    db, err := sql.Open("mysql", "root:xxxxx@tcp(xxxxxxxx:3306)/test?charset=utf8")
    checkErr(err)

    fmt.Println("链接数据库test")

    //插入
    stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
    checkErr(err)
    res, err := stmt.Exec("XXXXX", "Gopher", "2012-12-09")
    checkErr(err)
    id, err := res.LastInsertId()
    checkErr(err)
    fmt.Println(id)

    //更新数据
    stmt, err := db.Prepare("update userinfo set username=? ,departname=? where id=?")
    checkErr(err)
    res, err := stmt.Exec("testusername", "testdepartname", id)
    checkErr(err)
    affect, err := res.RowsAffected()
    checkErr(err)
    fmt.Println(affect)

    //查询数据
    rows, err := db.Query("select * from userinfo")
    checkErr(err)

    for rows.Next() {
        var id int
        var username string
        var departname string
        var created string
        err = rows.Scan(&id, &username, &departname, &created)
        checkErr(err)
        fmt.Println(id)
        fmt.Println(username)
        fmt.Println(departname)
        fmt.Println(created)
    }

}

  

网站地图xml地图