golang mysql操作介绍


本文摘自php中文网,作者尚,侵删。

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。下面就来由go入门教程栏目介绍一些关于mysql的操作。

go操作mysql数据库,用的库是 go-sql-driver/mysql,安装直接go get

1

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

sql.DB

DB类型可用的函数有:

1、Query(c string, args interface{} …) (*Rows, error),常用于SELECT语句

2、Exec(c string, args interface{} …) (*Rows, error),常用与UPDATE和INSERT

3、Prepare(c string) (*Stmt, error),其他语句,也可以用于执行上述语句,返回Stmt指针

sql.Stmt

Stmt是准备好的语句,可以执行数据库语句操作,常用函数有:

Exec(args interface{} …) (Result, error),给定参数并执行准备好的语句,然后返回语句的总结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//...

    stmt, err := db.Perpare("INSERT INTO User(user,pwd) VALUES (?, ?)")

    if err != nil {

        panic(err)

    }

    defer stmt.Close()

    _, err := stmt.Exec("laoli", "123456")

    if err != nil {

        panic(err)

    }

//...

//...

    stmt, err := db.Perpare("DELETE FROM User")

    if err != nil {

        panic(err)

    }

    defer stmt.Close()

    _, err := stmt.Exec()

    if err != nil {

        panic(err)

    }

Query(args interface{} …) (*Rows, error),给定参数并执行准备好的语句,返回行结果,比方说SELECT操作就必须用这个函数调用。

sql.Rows

Rows是sql语句执行返回的表,Rows会占用缓存,Rows.Next()里,如果返回false,则会自动释放缓存。
看一下源码:

1

2

3

4

5

6

7

8

9

10

11

// 源码

func (rs *Rows) Next() bool {

    var doClose, ok bool

    withLock(rs.closemu.RLocker(), func() {

        doClose, ok = rs.nextLocked()

    })

    if doClose {

        rs.Close() //在这里释放掉了

    }

    return ok

}

例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

package main

 

import (

    "database/sql"

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

)

 

var db *sql.DB

func mian() {

    db = sql.Open("mysql", "root:123456@tcp(127.0.0.1)/test")

    if err := db.Ping(); err != nil {

        panic(err)

    }

}

 

func Insert() {

    _, err := db.Exec("INSERT INTO User(user, pwd) VALUE (?, ?)", "laowang", "123456")

    if err != nil {

        panic(err)

    }

}

 

func SelectRow() {

    rows, err := db.Query("SELECT * FROM User WHERE user=?", "laowang")

    if err != nil {

        panic(err)

    }

    //defer rows.Close() //如果后面代码没有循环调用rows.Next(),就需要手动在这里释放一下,不然会一直占用缓存

    var user string

    var pwd string

    for rows.Next() {

        row.Scan(&user, &pwd)

    }

    print(user, pwd)

}

更多go语言知识请关注php中文网go语言教程栏目。

以上就是golang mysql操作介绍的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang反射机制

golang语言社区】源码篇--sync包map

golang sleep为什么没有返回值

golang 创建守护进程以及平滑重启

常见的 go 处理字符串的技巧

golang里的变量问题

go那些事儿|go反射使用第二弹(valueof)

go-carbon1.2.4发布了!新增系列时间比较方法

go中sync.mutex源码解读

golang和go是一样的吗

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...