关于环境的配置请参考上一篇文章,本文仅包含示例代码

namespace idealand
{typedef int (*PGResultHandler)(PGresult*);class DB{public:const char* conn_string = "user=** password=** host=** port=** dbname=** connect_timeout=5";const char* set_secure = "SELECT pg_catalog.set_config('search_path', 'public', false)";PGconn* conn=0;PGresult* res=0;void close(){if(conn) PQfinish(conn); }void ouput(){int nFields, i, j;// first, print out the attribute names nFields = PQnfields(res);    for (i = 0; i < nFields; i++)     printf("%-15s", PQfname(res, i));printf("\n");// next, print out the rowsint rows=PQntuples(res);for (i = 0; i < rows; i++){for (j = 0; j < nFields; j++) printf("%-15s", PQgetvalue(res, i, j));printf("\n");}}int exe_select(const char* sql, PGResultHandler handler){int r = 0;char* cmd = string("DECLARE myportal CURSOR FOR %s", sql);conn = PQconnectdb(conn_string); if (PQstatus(conn) != CONNECTION_OK) goto fail;/* Set always-secure search path, so malicious users can't take control. */res = PQexec(conn, set_secure); if (PQresultStatus(res) != PGRES_TUPLES_OK) { goto fail; } PQclear(res);/* Start a transaction block */res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { goto fail; } PQclear(res); res = PQexec(conn, cmd); if (PQresultStatus(res) != PGRES_COMMAND_OK) { goto fail; } PQclear(res);res = PQexec(conn, "FETCH ALL in myportal"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { goto fail; }if (handler){handler(res);}else{ouput();}PQclear(res);res = PQexec(conn, "END"); PQclear(res); goto ok;fail: IdealandF(cmd); log_show("Postgres failed: %s", PQerrorMessage(conn)); if (res) PQclear(res); close(); return -2;ok:   IdealandF(cmd); close(); return 0;}int exe_insert(const char* sql, PGResultHandler handler){int r = 0;char* cmd = string("%s RETURNING id;", sql);conn = PQconnectdb(conn_string); if (PQstatus(conn) != CONNECTION_OK) goto fail;/* Set always-secure search path, so malicious users can't take control. */res = PQexec(conn, set_secure); if (PQresultStatus(res) != PGRES_TUPLES_OK) { goto fail; } PQclear(res);/* Start a transaction block */res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { goto fail; } PQclear(res);res = PQexec(conn, cmd); if (PQresultStatus(res) != PGRES_TUPLES_OK) { goto fail; }if (handler){handler(res);}else{r = atoi(PQgetvalue(res, 0, 0));}PQclear(res);res = PQexec(conn, "END"); PQclear(res); goto ok;fail:IdealandF(cmd); log_show("Postgres failed: %s", PQerrorMessage(conn)); if (res) PQclear(res); close(); return -2;ok:IdealandF(cmd); close(); return r;}int exe_update_delete(const char* sql, PGResultHandler handler){int r = 0;conn = PQconnectdb(conn_string); if (PQstatus(conn) != CONNECTION_OK) goto fail;/* Set always-secure search path, so malicious users can't take control. */res = PQexec(conn, set_secure); if (PQresultStatus(res) != PGRES_TUPLES_OK) { goto fail; } PQclear(res);/* Start a transaction block */res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { goto fail; } PQclear(res);res = PQexec(conn, sql); if (PQresultStatus(res) != PGRES_COMMAND_OK) { goto fail; }if (handler){handler(res);}else{ouput();}PQclear(res);res = PQexec(conn, "END"); PQclear(res); goto ok;fail:log_show("Postgres failed: %s", PQerrorMessage(conn)); if (res) PQclear(res); close(); return -2;ok:close(); return r;}};}

windows vs2022 c/c++连接操作postgresql数据库 - 增删改查相关推荐

  1. VS2022,C#中对PostgreSQL数据库增删改查实例记录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.c#在VS中连接PostgreSQL数据库 二.使用步骤 1.引入库 2.设置连接 3.然后新建一个类文件,开始写 ...

  2. Go语言sqlx库操作PostgreSQL数据库增删改查

    0. 引用 sqlx地址:https://github.com/jmoiron/sqlx PostgreSQL官网:https://www.postgresql.org/ 1. PostgreSQL安 ...

  3. jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)

    使用jdbc连接并操作Oracle数据库(增删改查IDUS) [oracle@zaibei-db ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Pro ...

  4. PostgreSql数据库增删改查以及其他基本命令

    先来安装一波,我在docker上安装的 #先运行docker,我使用的是自定义的centos+vim镜像 docker run -itd --name pgsql centos-vim /usr/sb ...

  5. Python FastAPI 框架 操作Mysql数据库 增删改查

    2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...

  6. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  7. python对sqlite增删改查_Python操作sqlite3数据库 增删改查

    SQLite,是一款轻型的数据库,占用资源非常的低.这里记录下对sqlite3的增删改查相关操作,顺便复习一下SQL语句- -. 一.创建数据库 连接到一个现有的数据库.如果数据库不存在,那么它就会被 ...

  8. uniCloud云函数操作云数据库增删改查

    uniCloud操作云数据库 1.获取集合的引用 const db = uniCloud.database() // 获取"users"集合的引用 const users = db ...

  9. js修改mysql数据库数据_Node.js操作mysql数据库增删改查

    关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...

最新文章

  1. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver
  2. 使用curl上传带有文件的POST数据
  3. DNS域名服务器双master+ntp时间服务器双主+keepalived企业高可用方案 附脚本
  4. CSS之固定定位、相对定位、绝对定位
  5. 谈谈spark.sql.shuffle.partitions和 spark.default.parallelism 的区别及spark并行度的理解
  6. dnspod-sr的安装和使用
  7. php br2nl,收藏一些规范化输入输出的PHP函数
  8. 事务并发、事务隔离级别
  9. 51nod 1274 最长递增路径(DP)
  10. dmg文件转换iso ultraiso_Ultraiso软盘如何制作U盘启动盘
  11. 三对角矩阵的压缩存储
  12. 常见的15种音频格式
  13. 翁凯java进阶_翁凯-----java课程入门与进阶1
  14. android基于xposed框架,基于Xposed框架的模块:Android EagleEye
  15. HTML 基础【1】 -- 入门介绍 / 基本结构 / 块级标签 / 行内标签
  16. 手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程
  17. nginx 负载均衡安装及升级步骤
  18. word文档自动保存方法
  19. 2018沈阳k(经典的约瑟夫环)
  20. opencv 简单的裂缝检测

热门文章

  1. 便来亭心里坐下 水浒
  2. A记录和CNAME记录的区别
  3. PDK工艺库安装总结
  4. 除了搜索,Google还能做什么?(转)
  5. 转载记录 数据源配置
  6. 添加打印机出现错误代码:0x000006d9
  7. 2022年高处安装、维护、拆除报名考试及高处安装、维护、拆除新版试题
  8. 【SAS】format和informat
  9. 赵小楼《天道》《遥远的救世主》深度解析(73)你认为的玄幻不可描述的事物都是有其理法可循,认识了理法,玄也就不玄了
  10. 建筑物(含地库)激光SLAM点云可视化