pq接口

获取驱动

瀚高数据库针对GO语言的pq驱动,以github.com/lib/pq为基础进行安全加固,支持sm3等国密算法。

驱动包名称:github.com/lib/pq

下载链接:https://pan.baidu.com/s/1xuz6uJz0utRgKWecXhpOiA?pwd=o0tj

引入驱动

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

连接到数据库

import (
"database/sql"

_ "github.com/lib/pq"
)

func main() {
connStr := "host=localhost port=5866 user=sysdba password=xxxxx dbname=highgo"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}

age := 21
rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)

}

您还可以使用 URL 方式连接到数据库。例如:

connStr := "postgres://user:password@ip/dbname?sslmode=verify-full"
db, err := sql.Open("postgres", connStr)

支持的连接字符串参数:

  • dbname - 要连接到的数据库的名称。
  • user - 登录身份的用户。
  • password - 用户的密码。
  • host - 要连接到的主机。
  • port - 要绑定到的端口。
  • sslmode - 是否使用 SSL,默认值为 require,可选参数为disable, require, verify-ca, verify-full
  • connect_timeout - 连接的最长等待时间(以秒为单位)。零或未指定表示无限期等待。
  • sslcert - 证书文件位置。该文件必须包含 PEM 编码的数据。
  • sslkey - 密钥文件位置。该文件必须包含 PEM 编码的数据。
  • sslrootcert - 根证书文件的位置。文件必须包含 PEM 编码数据。

请注意,连接参数 client_encoding (它设置了连接的文本编码可以设置,但必须为“UTF8”)。

有关连接字符串参数的详细信息,请参阅 http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING。

CURD

package main

/*
数据准备:
create table sdbo_department (dep_id integer,dep_name varchar);
*/

import (
"database/sql"
"fmt"
"log"

_ "github.com/lib/pq"
)

const (
host = "192.168.33.186"
port = 5866
user = "sysdba"
password = "Hello@123"
dbname = "highgo"
)

func connectDB() *sql.DB {
/*方式一:密码不可以使用#特殊字符,@可以。*/
ConnString := "postgres://sysdba:Hello@123@192.168.33.186:5866/highgo?client_encoding=utf8"
// 变种:
//ConnString:="postgres://sysdba:Hello@123@tcp(192.168.33.186:5866)/highgo?client_encoding=utf8"
db, err := sql.Open("postgres", ConnString)

/*
方式二: 密码中可以#、@特殊字符。
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
*/

if err != nil {
panic(err)
}

err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
return db
}

func insertUser(db *sql.DB) {
stmt, err := db.Prepare("insert into sdbo_department(dep_id,dep_name) values($1,$2)")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(1, "mgr")

if err != nil {
log.Fatal(err)
} else {
fmt.Println("insert into sdbo_department success!")
}

}

func query(db *sql.DB) {
var id, name string

rows, err := db.Query(" select * from sdbo_department where dep_id=$1", "1")

if err != nil {
fmt.Println(err)
}
defer rows.Close()

for rows.Next() {
err := rows.Scan(&id, &name)

if err != nil {
fmt.Println(err)
}
}

err = rows.Err()
if err != nil {
fmt.Println(err)
}

fmt.Println(id, name)
}

func main() {
db := connectDB()
insertUser(db)
query(db)

}
运行结果

image