windows vs2022 c/c++连接操作postgresql数据库 - 增删改查
关于环境的配置请参考上一篇文章,本文仅包含示例代码
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数据库 - 增删改查相关推荐
- VS2022,C#中对PostgreSQL数据库增删改查实例记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.c#在VS中连接PostgreSQL数据库 二.使用步骤 1.引入库 2.设置连接 3.然后新建一个类文件,开始写 ...
- Go语言sqlx库操作PostgreSQL数据库增删改查
0. 引用 sqlx地址:https://github.com/jmoiron/sqlx PostgreSQL官网:https://www.postgresql.org/ 1. PostgreSQL安 ...
- jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)
使用jdbc连接并操作Oracle数据库(增删改查IDUS) [oracle@zaibei-db ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Pro ...
- PostgreSql数据库增删改查以及其他基本命令
先来安装一波,我在docker上安装的 #先运行docker,我使用的是自定义的centos+vim镜像 docker run -itd --name pgsql centos-vim /usr/sb ...
- Python FastAPI 框架 操作Mysql数据库 增删改查
2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
- python对sqlite增删改查_Python操作sqlite3数据库 增删改查
SQLite,是一款轻型的数据库,占用资源非常的低.这里记录下对sqlite3的增删改查相关操作,顺便复习一下SQL语句- -. 一.创建数据库 连接到一个现有的数据库.如果数据库不存在,那么它就会被 ...
- uniCloud云函数操作云数据库增删改查
uniCloud操作云数据库 1.获取集合的引用 const db = uniCloud.database() // 获取"users"集合的引用 const users = db ...
- js修改mysql数据库数据_Node.js操作mysql数据库增删改查
关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...
最新文章
- Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver
- 使用curl上传带有文件的POST数据
- DNS域名服务器双master+ntp时间服务器双主+keepalived企业高可用方案 附脚本
- CSS之固定定位、相对定位、绝对定位
- 谈谈spark.sql.shuffle.partitions和 spark.default.parallelism 的区别及spark并行度的理解
- dnspod-sr的安装和使用
- php br2nl,收藏一些规范化输入输出的PHP函数
- 事务并发、事务隔离级别
- 51nod 1274 最长递增路径(DP)
- dmg文件转换iso ultraiso_Ultraiso软盘如何制作U盘启动盘
- 三对角矩阵的压缩存储
- 常见的15种音频格式
- 翁凯java进阶_翁凯-----java课程入门与进阶1
- android基于xposed框架,基于Xposed框架的模块:Android EagleEye
- HTML 基础【1】 -- 入门介绍 / 基本结构 / 块级标签 / 行内标签
- 手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程
- nginx 负载均衡安装及升级步骤
- word文档自动保存方法
- 2018沈阳k(经典的约瑟夫环)
- opencv 简单的裂缝检测