Kadb中的ecpg编程

embedded/2024/11/28 13:51:27/

Kadb中的ecpg编程

测试程序:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

// 相当于高级程序语言的全局变量定义

EXEC SQL BEGIN DECLARE SECTION; // 主变量声明开始

const char* target1 = "postgres@192.168.85.155:5432"; // 数据库1

const char* user1 = "postgres";

const char* passwd1 = "123456";

const char* target2 = "test@192.168.85.155:5432"; // 数据库2

const char* user2 = "postgres";

const char* passwd2 = "123456";

int rows = 0; // 表行数

char sno[10]; // s表的四个属性(s表是自定义的)

char sname[20];

int status;

char city[20];

EXEC SQL END DECLARE SECTION; // 主变量声明结束

int main() {

         EXEC SQL WHENEVER SQLERROR SQLPRINT; // error 时输出错误信息

         // 连接至数据库1

         EXEC SQL CONNECT TO :target1 USER :user1 USING :passwd1;

         printf("\n已连接%s\n", target1);

        EXEC SQL SET AUTOCOMMIT TO ON;

         EXEC SQL drop database if exists test; // 删除 spj 数据库

         EXEC SQL create database test; // 创建 spj 数据库

         // 断开数据库1

         EXEC SQL DISCONNECT CURRENT; // 这个不写也能运行,不知道有没有风险

         printf("\n已断开%s\n", target1);

         // 连接至数据库2

         EXEC SQL CONNECT TO :target2 USER :user2 USING :passwd2;

         printf("\n已连接%s\n", target2);

         // 下面五条exec sql,建表及插入

         EXEC SQL drop table if exists s;

         EXEC SQL CREATE TABLE IF NOT EXISTS s(sno char(10) primary key, sname char(20) unique, status int, city char(20));

         EXEC SQL insert into s(sno, sname, status, city) values('s1', 'APEX LEGEND', 114514, 'Wuhan');

         EXEC SQL insert into s(sno, sname, status, city) values('s2', 'DEVIL MAY CRY5', 616161, 'Wuhan');

         EXEC SQL insert into s(sno, sname, status, city) values('s3', 'WARFRAME', 123456, 'Wuhan');

         // 写入中文,数据库内是utf8,控制台输出的是gbk,会乱码

         EXEC SQL END; // 结束事务块

         EXEC SQL BEGIN; // BEGIN 事务块,DECLARE只能在事务块中使用

         // 定义游标,相当于每次读表的一行

         EXEC SQL DECLARE iterator CURSOR FOR

                                   select sno, sname, status, city

                                   from s;

         EXEC SQL OPEN iterator; // 打开游标

         EXEC SQL select count(*) into :rows from s; // 获取行数,只有主变量能被sql赋值

         int flag = 0;

         while (rows --) {

                  EXEC SQL fetch iterator into :sno, :sname, :status, :city; // fetch 获取一行元组

                 

                  if (flag ++ == 0) { // 第一次把列名输出

                          printf("\n%-10s %-20s %-10s %-20s \n", "sno", "sname", "status", "city");

                  }

                  printf("%-10s %-20s %-10d %-20s \n", sno, sname, status, city);

         }

         EXEC SQL CLOSE iterator; // 关闭游标

         EXEC SQL END; // 结束事务块

         EXEC SQL DISCONNECT CURRENT; // 断开数据库2

         printf("\n已断开%s\n", target2);

         return 0;

}

编译:

/usr/local/pgsql/bin/ecpg proc.pgc

cc -I/usr/local/pgsql/include -c proc.c

cc -o proc proc.o -L/usr/local/pgsql/lib –lecpg

运行:

-bash-4.2$ ./proc

已连接postgres@192.168.85.155:5432

已断开postgres@192.168.85.155:5432

已连接test@192.168.85.155:5432

SQL error: there is already a transaction in progress

sno        sname                status     city                

s1         APEX LEGEND          114514     Wuhan               s1        

s2         DEVIL MAY CRY5       616161     Wuhan               s2        

s3         WARFRAME             123456     Wuhan               s3        

已断开test@192.168.85.155:5432


http://www.ppmy.cn/embedded/141195.html

相关文章

HarmonyOS:应用沙箱

一、应用文件概述 应用文件:文件所有者为应用,包括应用安装文件、应用资源文件、应用缓存文件等。 设备上应用所使用及存储的数据,以文件、键值对、数据库等形式保存在一个应用专属的目录内。该专属目录我们称为“应用文件目录”,…

python爬虫安装教程

Python爬虫是用于从网站上自动抓取信息的程序。在开始之前,请确保您了解并遵守目标网站的服务条款,尊重版权法,并且在合理合法的范围内使用爬虫技术。 安装环境 安装Python:首先确保您的计算机上已经安装了Python。推荐版本为3.…

学习日志 --A5rZ

24.11.27 0001:2024 强网杯青少年专项赛 EnterGam 复现已完成 0002:在x86上模拟arm64(搁置,原因:资料过少,可行性过低) 0003:2024 强网杯青少年专项赛 Flip_over 复现终止(无arm真机) 0004: 开始复现 2024 强网杯青少年专项赛 journey_story

「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字,应用会判断是否接近目标数字,并提供提示“高一点”或“低一点”,直到用户猜中目标数字。这个小游戏结合状态管理和用户交互,是一个入门级的互动应用示例。 关键词 UI互…

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合…

【技术文档:技术传播的灯塔】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

⭐️ GitHub Star 数量前十的工作流项目

文章开始前,我们先做个小调查:在日常工作中,你会使用自动化工作流工具吗?🙋 事实上,工作流工具已经变成了提升效率的关键。其实在此之前我们已经写过一篇博客,跟大家分享五个好用的工作流工具。…

网络安全在数字时代保护库存数据中的作用

如今,通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而,技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要,而且必不可少。 了解网络安全及其…