1.下载 postgresql-10.4-1-windows-x64.exe 进行安装

2.环境配置
(1)文本使用的IDE是VS2010,我们需要配置包含目录(include)、库目录(lib)、链接器输入附加依赖(libpq.lib); 

(2)工程目录下需要加入4个dll文件(libeay32.dlllibintl-8.dlllibpq.dllssleay32.dll、libiconv-2.dll),这些文件都能在PostgreSQL安装目录下(D:\Program Files\PostgreSQL\10\bin)找到;
(3)工程cpp文件中加入头文件#include <libpq-fe.h>libpq-fe.h头文件包含了API接口函数声明及注释,下面介绍的函数在libpq-fe.h中都能找到。

3.连接数据库

(1)数据库连接函数

extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport,
const char *pgoptions, const char *pgtty,
const char *dbName,
const char *login, const char *pwd);
返回值PGconn *指针,即连接指针。如果你要对PQsetdbLogin函数封装的话,记得将形参连接指针设成PGconn *&引用类型,因为连接函数需要对连接指针修改,而不是修改对象!
pghost:主机地址,本机为127.0.0.1或localhost;
pgport:端口值,一般为5432;
pgoptions:额外选项,NULL即可;
pgtty:NULL即可;
dbName:数据库名;
user:用户名;
pwd:密码;

示例:

int connect()
{
//连接数据库的两种方式
//设置为自己postgresql的数据库名 用户名和密码
//conn = PQconnectdb("host=localhost port=5432 dbname=postgres user=postgres password=123456"); conn = PQsetdbLogin("localhost", "", NULL, NULL, "postgres", "postgres", "");
if (PQstatus(conn) != CONNECTION_OK)
{
cout << "connection error" << endl;
return -;
}
else
{
cout << "connection success" << endl;
return ;
}
}

(2)错误显示函数

extern char *PQerrorMessage(const PGconn *conn)
当连接有误时,可以使用PQerrorMessage函数显示出错信息。

示例:

cout<<PQerrorMessage(conn)<<endl;

(3)封装成ConnectToDB函数

bool ConnectToDB(PGconn *&conn,char *pghost,char *pgport,char *dbname,char *user,char *pwd)
{
//pgoptions、pgtty参数默认为NULL
char *pgoptions,*pgtty;
pgoptions=NULL;
pgtty=NULL; conn=PQsetdbLogin(pghost,pgport,pgoptions,pgtty,dbname,user,pwd);
if(PQstatus(conn)==CONNECTION_BAD) // or conn==NULL
{
cout<<"Connection db "<<dbname<<" failed!"<<endl;
cout << PQerrorMessage(conn) << endl; /* 如果连接失败则输出错误信息 */
return false;
}
else
{
cout<<"Connection db "<<dbname<<" success!"<<endl;
return true;
}
}

4、执行SQL语句
执行SQL语句主要是增删改查,只有查询会返回有效记录集。

示例表为:

(1)SQL执行函数

extern PGresult *PQexec(PGconn *conn, const char *query)
返回值PGresult *:查询集指针;
conn:连接指针;
query:SQL语句;

示例:

char query[] = {"SELECT a, b    FROM public.aaa "};
res = PQexec(conn, query);

(2)元组数函数

extern int PQntuples(const PGresult *res)
返回值:查询集中记录数;
res:查询集指针;

示例:

int tuple_num = PQntuples(res);

(3)字段数函数

extern int PQnfields(const PGresult *res)
返回值:每条记录中列数(字段数);
res:查询集指针;

示例:

int field_num = PQnfields(res);

(4)取值函数

extern char *PQgetvalue(const PGresult *res, int tup_num, int field_num);
返回值:查询集中每个位置的值;
res:查询集指针;
tup_num:行号,从0开始;
field_num:列号,从0开始;

5、关闭连接
(1)查询集清理函数

extern void PQclear(PGresult *res)
res:查询集指针;

(2)关闭连接函数

extern void PQfinish(PGconn *conn)
conn:连接指针;

6、错误查询
许多时候执行SQL语句后,数据表没有变化,程序也不报错,这种情况很难发现错误。我们需要使用PostgreSQL提供的errorMessage和status函数追踪程序变量的状态。
比如:
(1)PQerrorMessage函数提供了PGconn连接指针的出错信息;

extern char *PQerrorMessage(const PGconn *conn);
conn:连接指针

(2)PQresultErrorMessage函数提供了PGresult查询集指针的出错信息;

extern char *PQresultErrorMessage(const PGresult *res);
res:查询集指针

(3)PQresultStatus函数返回查询集指针的状态信息ExecStatusType,这是个枚举enum类型:

extern ExecStatusType PQresultStatus(const PGresult *res);
res:查询集指针

ExecStatusType的枚举类型:

ypedef enum
{
PGRES_EMPTY_QUERY = , /* empty query string was executed */
PGRES_COMMAND_OK, /* a query command that doesn't return
* anything was executed properly by the
* backend */
PGRES_TUPLES_OK, /* a query command that returns tuples was
* executed properly by the backend, PGresult
* contains the result tuples */
PGRES_COPY_OUT, /* Copy Out data transfer in progress */
PGRES_COPY_IN, /* Copy In data transfer in progress */
PGRES_BAD_RESPONSE, /* an unexpected response was recv'd from the
* backend */
PGRES_NONFATAL_ERROR, /* notice or warning message */
PGRES_FATAL_ERROR, /* query failed */
PGRES_COPY_BOTH, /* Copy In/Out data transfer in progress */
PGRES_SINGLE_TUPLE /* single tuple from larger resultset */
} ExecStatusType;

封装成ExecSQL函数:

bool ExecSQL(PGconn *conn, const char *sql)
{
PGresult *res = NULL;
if (conn == NULL)
{
cout << "Conn is null" << endl;
return false;
}
else
{
res = PQexec(const_cast<PGconn *>(conn), sql);
if (res == NULL)
{
std::cout << PQresultErrorMessage(res) << endl; /* 打印失败原因 */
return PQresultStatus(res); /* 返回错误码 */
}
else
{
// 输出记录
int tuple_num = PQntuples(res);
int field_num = PQnfields(res);
for (int i = ; i<tuple_num; ++i)
{
for (int j = ; j<field_num; ++j)
cout << PQgetvalue(res, i, j) << " ";
cout << endl;
}
//ClearQuery(res);
return true;
}
}
}

windows下安装配置postgreSQL的更多相关文章

  1. 在windows下安装配置Ulipad

    在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便. Ulipad下载地址: https://github.com/limodou ...

  2. Windows下安装配置MongoDB

    Windows下安装配置MongoDB 一,介绍 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB ...

  3. (转)windows 下安装配置 Nginx 详解

    windows 下安装配置 Nginx 详解 本文转自https://blog.csdn.net/kingscoming/article/details/79042874 nginx功能之一可以启动一 ...

  4. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

  5. RabbitMQ学习在windows下安装配置

    RabbitMQ学习一. 在windows下安装配置 1.下载并安装erlang,http://www.erlang.org/download.html,最新版是R15B01(5.9.1).由于我机器 ...

  6. Windows下安装配置免安装MySQL5.7服务器

      Windows下安装配置免安装MySQL5.7服务器 1.下载.解压安装包 从MySQL官方网站上下载mysql-5.7.19-winx64.zip 下载完成后,把安装包解压到D:\DevSoft ...

  7. Windows下安装配置MySQL

    Windows下安装配置MySQL的基本步骤 一.MySQL下载 MySQL官方下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads ...

  8. Windows下安装配置ant

    1.ant安装 请从官网下载ant的*.zip格式的安装包, Windows建议下载*.zip版本, Linux建议下载*.gz版本. 2.配置环境变量 解压之后,在Windows中配置环境变量, 在 ...

  9. 2、Windows下安装配置Redis

    windows下redis软件开源安装包挂载到github上,下面将详细介绍如何在windows下安装redis服务器 下载地址:https://github.com/MSOpenTech/redis ...

随机推荐

  1. android setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别

    手工设置文本与图片相对位置时,常用到如下方法: setCompoundDrawables(left, top, right, bottom) setCompoundDrawablesWithIntri ...

  2. 移动端click事件出现300ms延迟

    问题分析: 双击缩放是指手在屏幕上快速点击两次,iOS自带的Safari浏览器会将网页缩放至原始比例.当用户在屏幕上单击某元素时,浏览器会先捕获此处单击,但浏览器不知道用户是要单击链接还是要双击该部分 ...

  3. C 小白的 thrift 环境搭建

    公司有个通讯 是用的 thrift ,thrift 是个什么都东西,可以类比 webservice 吧,比 webservice 高效些,不管是啥,搞他! 先在 mac 上搞本地开发环境 网上一搜 貌 ...

  4. python 函数split()

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...

  5. css 实现文字提示说明、文字绕图效果

    鼠标放在某个文字上时,展示文字的解释说明 代码: <!DOCTYPE html> <html lang="en"> <head> <met ...

  6. clipboard.js一个可以在移动端一键复制的插件

    网址:https://clipboardjs.com/ 使用方法: 1.引入js <script src="dist/clipboard.min.js"></sc ...

  7. GMA Round 1 空降

    传送门 空降 在一块100m*100m的平地上,10位战士从天而降!他们每人会均匀随机地落在这个地图上的一个点. 紧随其后,BOSS随机出现在这个地图上的某一点,然后它会奔向位于左上角的出口,而战士们 ...

  8. Qt支持哪些硬件通信协议???

    如题,广大使用Qt开发嵌入式的伙伴们知道Qt支持哪些硬件通信协议的开发???目前已知的串口和网络TCP/IP协议开发支持,其他的呢??? 欢迎留言交流!!!

  9. Redis 中可以存储的五种基本类型

    具体介绍 数字还是字符? String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M --- Hash(字典) 键值对集合,即编程语言中的Map类型 ...

  10. 1 开发环境 eclipse oomph版本 jdk1.8 lucene 6.6.0,luke6.6.0

    第一个jar  是分词器,后面的是lucene  解压出来的 路径如下: lucene-analyzers-common-6.6.0.jar:lucene-6.6.0/common/ lucene-a ...