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. CSS之分组选择器和嵌套选择器

    分组选择器, 将一个样式应用于多个类,或者标签啥的 每个选择器用逗号隔开 <!DOCTYPE html> <html> <head> <meta charse ...

  2. xstream实现对象的序列化和反序列化(Java)

    概述 最新整理Java方面XML序列化和反序列化的常用工具类,找到了dom4j和xstream.dom4j相对小巧,很好的解读xml:但是对于对象的xml序列化和反序列化,我还是比较喜欢xsteam( ...

  3. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  4. vue加载优化策略

    vue.js是一个比较流行的前端框架,与react.js.angular.js相比来说,vue.js入手曲线更加流畅,不管掌握多少都可以快速上手.但是单页面应用也都有其弊病,有时候首屏加载慢的让人捏舌 ...

  5. 禁用JavaScript之后,你的网站表现如何?

    一 最近要做一个新官网,需求评审完之后,考虑到官网都是纯静态页面,功能简单,操起vue-cli3几秒内创建好了项目脚手架,开发前,我打开了首页模板文件,看到下面这行字,有了一些思考-- <nos ...

  6. JS this用法详解

        随着对js的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象.闭包.原型链继承等等 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特 ...

  7. 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)

    题意: 有一个骆驼,n个绿洲遍布在数轴上,第i个绿洲的坐标为x[i],保证x[i]单增.骆驼的驼峰有体积初始值V.当驼峰的体积变为v的时候,驼峰中至多只能够存储v L的水.骆驼希望走完所有的绿洲,并且 ...

  8. Python-Django学习

    1,安装Django与python版本的对应1.8 2.7,3.2--3.51.9,1.10 2.7,3.4,3.51.11 2.7,3.4,3.5,3.62.0 2.1 第一种安装:pip inst ...

  9. XVII Open Cup named after E.V. Pankratiev. GP of Tatarstan

    A. Arithmetic Derivative 形如$p^p(p是质数)$的数的比值为$1$,用$k$个这种数相乘得到的数的比值为$k$,爆搜即可. #include<cstdio> # ...

  10. c#清空数组&初始化数组&动态数组

    清空数组>>>Array.Clear [去MSDN查看] ]; ; i < str.Length; i++) str[i] = i.ToString(); Array.Clea ...