首页 存档 技术 查看内容

Golang Package-database/sql

2018-3-30 13:00 |来自: 互联网 343 0

摘要: 一、导入库 import ( "database/sql" _ "github.com/lib/pq" ) 二、连接DB func main() { db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full") /*db, err := ...

一、导入库

import (
  "database/sql"
  _ "github.com/lib/pq"
)

二、连接DB

func main() {
  db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full")
  /*db, err := sql.Open("postgres", 
     "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full")*/
  if err != nil {
    log.Fatal(err)
  }
  defer db.Close()
}

sql.Open的第一个参数是driver名称,第二个参数是driver连接数据库的信息。DB不是连接,并且只有当需要使用时才会创建连接,如果想立即验证连接,需要用Ping()方法,如下:

err = db.Ping()
if err != nil {
  // do something here
}

sql.DB的设计就是用来作为长连接使用的。不要频繁Open, Close。比较好的做法是,为每个不同的datastore建一个DB对象,保持这些对象Open。如果需要短连接,那么把DB作为参数传入function,而不要在function中Open, Close。

在database/sql中有一个很基本的连接池,当需要连接,且连接池中没有可用连接时,新的连接就会被创建;如果长时间保持空闲连接,可能会导致db timeout。可以设置SetMaxIdleConns和SetMaxOpenConns,也就是最大空闲连接和最大连接数,分别是下面这两个函数:

db.SetMaxIdleConns(n)
db.SetMaxOpenConns(n)

三、查询DB

(1)一般查询Query

var name, ** string
rows, err := db.Query("select name, ** from user where id = $1 ", 1)
if err != nil {
	fmt.Println(err)
}
defer rows.Close()

for rows.Next() {
	err := rows.Scan(
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部