最基本的样式

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
import(
"database/sql"

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

func main(){
db,err := sql.Open("mysql","user:password@tcp(127.0.0.1:3306/hello")

rows,err:=db.Query("select id,name from users where id = ?",1)
if err!=nil{
//XXX
}
defer func(){
err = rows.Close()
}

var users []User
for rows.Next(){
bar user User
err := rows.Scan(&user.Id,&user.Name)

if err!=nil{
//XXX
}

uesrs = append(users,user)
}

if rows.Err() !=nil{
//....
}
}

连接池管理

1
2
3
4
5
6
7
8
9
//连接池配置
func (db *DB) SetConnMaxIdleTime(d time.Duration) //连接的最大空闲时间
func (db *DB) SetConnMaxLifetime(d time.Duration) //设置连接的最大生存时间
func (db *DB) SetMaxIdleConns(n int) //设置最大空闲连接数
func (db *DB) SetMaxOpenConns(n int) //设置最大打开连接数

//连接池管理
func (db *DB) Stats() DBStats

处理返回数据的几种方法

1
2
3
4
5
Exec/ExecContext -> Result  //只对结果(是否成功)关注
Query / QueryContext -> Rows
(Columns)QueryRow / QueryRowContext -> Row (Rows简化)*

//ROW(S)返回行的数据