pq接口

獲取驅(qū)動(dòng)

瀚高數(shù)據(jù)庫針對(duì)GO語言的pq驅(qū)動(dòng),以github.com/lib/pq為基礎(chǔ)進(jìn)行安全加固,支持sm3等國密算法。

驅(qū)動(dòng)包名稱:github.com/lib/pq

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

引入驅(qū)動(dòng)

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

連接到數(shù)據(jù)庫

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 方式連接到數(shù)據(jù)庫。例如:

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

支持的連接字符串參數(shù):

  • dbname - 要連接到的數(shù)據(jù)庫的名稱。
  • user - 登錄身份的用戶。
  • password - 用戶的密碼。
  • host - 要連接到的主機(jī)。
  • port - 要綁定到的端口。
  • sslmode - 是否使用 SSL,默認(rèn)值為 require,可選參數(shù)為disable, require, verify-ca, verify-full
  • connect_timeout - 連接的最長等待時(shí)間(以秒為單位)。零或未指定表示無限期等待。
  • sslcert - 證書文件位置。該文件必須包含 PEM 編碼的數(shù)據(jù)。
  • sslkey - 密鑰文件位置。該文件必須包含 PEM 編碼的數(shù)據(jù)。
  • sslrootcert - 根證書文件的位置。文件必須包含 PEM 編碼數(shù)據(jù)。

請(qǐng)注意,連接參數(shù) client_encoding (它設(shè)置了連接的文本編碼可以設(shè)置,但必須為“UTF8”)。

有關(guān)連接字符串參數(shù)的詳細(xì)信息,請(qǐng)參閱 http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING。

CURD

package main

/*
數(shù)據(jù)準(zhǔn)備:
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)

}
運(yùn)行結(jié)果

image