Libpq 接口
Libpq 是應(yīng)用程序員使用瀚高數(shù)據(jù)庫的 C 接口。Libpq 由相關(guān)庫函數(shù)組成是一個庫函數(shù)的集合,它們允許客戶端程序傳遞查詢給瀚高數(shù)據(jù)庫后端服務(wù)器并且接收這些查詢的結(jié)果。同時,Libpq 也是很多其他瀚高數(shù)據(jù)庫應(yīng)用接口的底層引擎,包括為 C++、Perl、Python、Tcl和 ECPG 編寫的接口。
調(diào)用Libpq 庫,同JAVA使用JDBC原理效果一樣。
Libpq 可做三件事:與數(shù)據(jù)庫建立連接、發(fā)送 操作數(shù)據(jù)庫的語句并處理結(jié)果。
注意:使用 Libpq 的客戶端程序必須包括頭文件 libpq-fe.h 并必須與 libpq 庫鏈接在一起。****
常用函數(shù)
函數(shù)名稱 | 功能說明 |
---|---|
PQconnectdb | 創(chuàng)建一個數(shù)據(jù)庫連接 |
PGresult | 封裝查詢的結(jié)果 |
PQexec | 提交了一個sql命令到服務(wù)器然后等待結(jié)果 |
PQresultStatus | 返回該命令的結(jié)果狀態(tài)。PGRES_COMMAND_OK一個不返回數(shù)據(jù)的命令成功完成。 PGRES_TUPLES_OK 一個返回數(shù)據(jù)的命令(例如 SELECT 或者 SHOW)成功完成 |
PQntuples | 返回查詢結(jié)果中的行(元組)數(shù) |
PQnfields | 返回查詢結(jié)果中每一行的列(域)數(shù) |
PQgetvalue | 返回一個 PGresult 的一行的單一域值 |
PQclear | 釋放與一個 PGresult 相關(guān)的存儲。每一個命令結(jié)果不再需要時應(yīng)該用 PQclear 釋放 |
下面詳細(xì)介紹 Libpq 數(shù)據(jù)庫連接,以windows環(huán)境、HGDB安全版V4.5.7為例。
開發(fā)環(huán)境搭建
軟件 | 版本 |
---|---|
HGDB | 安全版V4、企業(yè)版v5及以上版本 |
IDE | Qt Creator 4.10.1(Qt 5.13.2) |
前提準(zhǔn)備
(1)在項目工程目錄下,新建文件夾hgsql(存放頭文件及鏈接庫):
(2)打開瀚高數(shù)據(jù)庫安裝目錄,將include和lib目錄復(fù)制到工程目錄下新建的hgsql文件夾下:
(3)打開Libpq_Demo.pro文件,添加包含路徑和靜態(tài)鏈接庫:
示例代碼
main.cpp
#include <QCoreApplication> |
執(zhí)行結(jié)果:
注意事項
1、配置了LIBS
后提示:LINK : fatal error LNK1104: 無法打開文件“xxx.lib”
,解決方案如下:
- 根據(jù)官方文檔,看下路徑是否正確,如下:
? 1. unix寫法比較通用,需要用-l
標(biāo)識庫名稱,-L
標(biāo)識庫路徑,在windows下,路徑要用絕對路徑
,這個地方比較關(guān)鍵。
? 2. 如果路徑中有空格的話就用雙引號包起來。
針對于上面第一點(diǎn),如果不想用絕對路徑的話,用相對路徑可以采用系統(tǒng)變量的方式,如下所示:
LIBS += $$PWD/lib/xxx.lib //$$PWD當(dāng)前工程目錄
2、配置了LIBS
后提示:cannoe find /opt/HighGo4.5.7-see/lib:File format not recognized
,解決方案如下:
發(fā)生場景:在linux環(huán)境上配置.pro文件
運(yùn)行時提示如下錯誤
原因是QT無法識別lib目錄下的部分lib庫文件格式,可以使用“l(fā)l”或者“l(fā)s -al”命令查看文件的指向類型
從圖中可以看出libpq.so.5.12是libpq.so和libpq.so.5的軟連接
所以libpq.so.5.12是非.so文件,所以QT在加載lib目錄時會把目錄下的所有文件當(dāng)成lib文件,不會以后綴名。
如果不想刪除軟連接,可以直接在.pro文件里把.so文件路徑給出來就可以了
LIBS += /opt/HighGo4.5.7-see/lib/libpg.so.5 |