Go语言的 database/sql 包的一个 MySQL驱动。
特性
轻量级与快速
原生Go语言,没有C绑定,只有纯Go
没有不安全的操作(类型转换等)
动态处理崩溃的连接
动态连接池
支持大于16MB的查询
环境要求
Go 1以上
MySQL (Version 4.1 or higher), MariaDB or Percona Se
rver
安装
简单地使用 go tool 在shell中把安装包加到你的$GOPATH
$ go get github.com/go-sql-driver/mysql
1
$gogetgithub.com/go-sql-driver/mysql
使用
sql包的用法简洁明了:
1、建立连接
首先是Open,
db, err := sql.Open(“mysql”, “user:password@/dbname”)
db 是一个*sql.DB类型的指针,在后面的操作中,都要用到db
open之后,并没有与数据库建立实际的连接,与数据库建立实际的连接是通过Ping方法完成。此外,db应该在整个程序的生命周期中存在,也就是说,程序一启动,就通过Open获得db,直到程序结束,再Close db,而不是经常Open/Close。
err = db.Ping()
2、基本用法
DB的主要方法有:
Query 执行数据库的Query操作,例如一个Select语句,返回*Rows
QueryRow 执行数据库至多返回1行的Query操作,返回*Row
PrePare 准备一个数据库query操作,返回一个*Stmt,用于后续query或执行。这个Stmt可以被多次执行,或者并发执行
Exec 执行数不返回任何rows的据库语句,例如delete操作
一段简单的测试代码:
Java
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
)
func insert(db *sql.DB) {
stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")
defer stmt.Close()
if err != nil {
log.Println(err)
return
}
stmt.Exec("guotie", "guotie")
stmt.Exec("testuser", "123123")
}
func main() {
db, err := sql.Open("mysql", "root:guotie@/hello")
if err != nil {
log.Fatalf("Open database error: %sn", err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
insert(db)
rows, err := db.Query("select id, username from user where id = ?", 1)
if err != nil {
log.Println(err)
}
defer rows.Close()
var id int
var name string
for rows.Next() {
err := rows.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
log.Println(id, name)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
}
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
packagemain
import(
"database/sql"
_"github.com/go-sql-driver/mysql"
"log"
)
funcinsert(db*sql.DB){
stmt,err:=db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")
deferstmt.Close()
iferr!=nil{
log.Println(err)
return
}
stmt.Exec("guotie","guotie")
stmt.Exec("testuser","123123")
}
funcmain(){
db,err:=sql.Open("mysql","root:guotie@/hello")
iferr!=nil{
log.Fatalf("Open database
error: %sn",
err)
}
deferdb.Close()
err=db.Ping()
iferr!=nil{
log.Fatal(err)
}
insert(db)
rows,err:=db.Query("select id, username from user where id = ?",1)
iferr!=nil{
log.Println(err)
}
deferrows.Close()
varidint
varnamestring
forrows.Next(){
err:=rows.Scan(&id,&name)
iferr!=nil{
log.Fatal(err)
}
log.Println(id,name)
}
err=rows.Err()
iferr!=nil{
log.Fatal(err)
}
}
github地址https://github.com/go-sql-driver/mysql,官网地址 http://godoc.org/github.com/go-sql-driver/mysql。