golang操作mysql数据库

Posted 追风逐月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang操作mysql数据库相关的知识,希望对你有一定的参考价值。

golang操作mysql数据库

代码: mysql的增、删、改、查

package main

import (
    "database/sql"
    "fmt"
    "strconv"
    "time"

    _ "github.com/go-sql-driver/mysql"
)

func main() {

    db, err := sql.Open("mysql", "root:[email protected](10.99.2.153:3306)/xes_nrcp?charset=utf8")
    defer db.Close()
    checkErr(err)

    //插入数据
    insert(21, db)

    //删除数据
    delete(14, db)

    //更新数据
    update(15, "设计部门", db)

    //查询数据
    get(db)

}

func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

func get(db *sql.DB) {
    rows, _ := db.Query("SELECT * FROM aaa_test")
    cloumns, _ := rows.Columns()

    //获取列字段
    for _, cloumn := range cloumns {
        fmt.Print(cloumn + " ")
    }
    fmt.Println()

    //遍历返回结果
    for rows.Next() {
        rows.Scan(&cloumns[0], &cloumns[1], &cloumns[2], &cloumns[3])
        fmt.Println(cloumns[0], cloumns[1], cloumns[2], cloumns[3])
    }
}

func insert(id int, db *sql.DB) {
    //插入数据方式

    stmt, _ := db.Prepare("INSERT aaa_test SET id=?,nameA=?,descA=?")
    res, _ := stmt.Exec(id, "研发部门", "2012-12-09", time.Now())
    resID, _ := res.LastInsertId()
    fmt.Println(resID)

    //or
    // stmt, _ := db.Prepare("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)")
    // res, _ := stmt.Exec(17, "研发部门", "2012-12-09", time.Now())
    // id, _ := res.LastInsertId()
    // fmt.Println(id)

    //or
    // res, _ := db.Exec("INSERT aaa_test (id,nameA,descA)values (?,?,?)", 18, "研发部门", "2012-12-09")
    // id, _ := res.LastInsertId()
    // fmt.Println(id)

    //or
    // db.Exec("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)", 14, "qwe", "2012-12-09", time.Now())

    //or
    //db.Exec("INSERT aaa_test SET id=?,nameA=?,descA=?,createTime=?", id, "研发部门", "写写代码", time.Now())

}

func delete(id int, db *sql.DB) {
    stmt, err := db.Prepare("delete from aaa_test where id=?")
    checkErr(err)

    res, err := stmt.Exec(id)
    checkErr(err)

    affect, err := res.RowsAffected()
    checkErr(err)
    fmt.Println("删除数据影响行数:" + strconv.FormatInt(affect, 10))

}

func update(id int, name string, db *sql.DB) {
    stmt, err := db.Prepare("update aaa_test set nameA=? where id=?")
    checkErr(err)

    res, err := stmt.Exec(name, id)
    checkErr(err)

    affect, err := res.RowsAffected()
    checkErr(err)

    fmt.Println(affect)
}

sql.Open()函数用来打开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是go-sql-driver定义的一些数据库链接和配置信息。它支持如下格式:

  [email protected]unix(/path/to/socket)/dbname?charset=utf8
  user:[email protected]tcp(localhost:5555)/dbname?charset=utf8
  user:[email protected]/dbname
  user:[email protected]tcp([de:ad:be:ef::ca:fe]:80)/dbname

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

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

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

我们可以看到我们传入的参数都是=?对应的数据,这样做的方式可以一定程度上防止SQL注入。

以上是关于golang操作mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

golang goroutine例子[golang并发代码片段]

golang代码片段(摘抄)

golangmysql可扩展分表代码

golang 连接、操作完mysql, 对mysql的连接会自动关闭,还是必须要手动关闭?

代码片段 - Golang 实现简单的 Web 服务器

GoLang如何操作mysql