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
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" db, err := sql.Open("postgres", ConnString)
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)
}
|
运行结果