postgresql c语言,任意语言访问PostgreSQL:C语言接口

开源软件的一个好处是可以根据需要修改程序代码。如果程序后台使用PostgreSQL数据库,可以很容易用各种语言对其进行访问。本文作为系列文章的第一篇,会陆续介绍C、C++、PHP、Tcl、Python及Perl等编程语言对PostgreSQL的访问方法。  需要说明的是,本文不太适合完全没有编程经验的读者。不过只要读者有基本的SQL知识,以及懂得至少一种编程语言即可看懂。也许读者正在使用的系统是Linux,但是只要使用的客户端API接口在其他系统可用,则程序代码不需更改即可在其他操作系统上正常使用。本文所示的代码全部基于Postgre 9.1,是目前最新的稳定版本,已经安装并经过测试。在本文的操作环境中,客户端与服务端位于不同的计算机,但位于同一局域网内,这种情况下可以在客户端通过命令gpsql -U postgre -h x.x.x.x很容易地连接到服务端。

首先要确保在客户端机器上有安装软件的权限,并且最好确保当前使用的数据库只做当前测试用,以免任何因不小心的操作导致重要数据的损坏。

C语言接口

在与数据库连接方面,C语言是一种常用语言,许多数据库都是用C写的。该语言高效灵活,因此如果想要写一款客户端接口,不管是仅仅包含控制台还是基于GUI的,并且不想用到浏览器,C语言也许是最好的选择。

连接C语言与Postgres使用的库名为libpq,它与PostgreSQL源码树绑定在一起。如果安装数据库系统时使用的是二进制文件而不是从源码编译安装,libpq可被单独安装,但也要记得需要使用选项-dev package(或-devel,取决于Linux系统的版本)。在Debian及其分发版上,安装libpq的命令为 #aptitude install libpq-dev。在基于RedHat的系统上,如CentOS,可以在postgresqlxx-libs包中找到libpq,其中xx为主要和次要版本号。因此要连接到PostgreSQL 9.1数据库,如果使用Fedora16,则需要安装postgresql91-lib或postgresql-devel。由于RHEL/CentOS用户大多使用Postgres库,导致程序的名称可能会有一些不同,而且由于Fedora用户能够使用更多最新的包,因此仅仅在使用一个旧版本时才需要第三方库。简而言之,任何支持PostgreSQL的系统均有其可用的libpq。

除了C语言,libpq同时也是C++、Perl和Tcl的API引擎,提供基本的函数对数据库进行连接、查询和修改。许多常用的函数都包含“PQ”前缀,如PQconnectdb或PQerrormessage。更多示例可查看PostgreSQL文档或查看src/test/examples。在C程序文件中,包含libpq-fe.h头文件并在编译时添加相应的链接标记-lpq。

安装并设置好之后,要做的第一件事就是连接数据库。PQconnectdb()函数带一个char *conninfo格式的参数,参数格式如dbname=[database_name],当然也可以是其他内容,只要格式对即可,最常用的关键字为host,hostaddr(numeric格式,以避免无用的DNS查询),port,user,password与sslmode。如果不使用参数,则会使用默认选项。假设服务器地址为192.168.0.101,username为postgres,数据库名为testdb1,尝试连接数据库的代码如下所示:

#include #include int main(int argc,char argv[]){    const char *conninfo;    PGconn *conn;    if (argc > 1)        conninfo = argc[1];    else    {        printf("Not enough arguments, exiting...");        return 1;    }    conn = PQconnectdb(conninfo);    /*Check to see how I did */    if(PQstatus(conn) = CONNECTION_OK)        printf("Connection succeeded.n");    else    {        /*Do something to deal with the error*/    }}

将代码保存为testlibpq并编译,编译后的程序用法如下:

$ testlibpg "hostaddr=192.168.0.101 user=postgres dbname=testdb1"

如果不出错误,会在屏幕上看到提示“Connection succeeded.”,表示连接数据库成功,不过上文并没有什么实际用处。那么何为实际用处呢----对数据进行查询,但这里先介绍如何断开连接,即调用PQfinish,该函数只有一个参数PGconn *conn,并返回void。

PQexec函数执行查询,参数为PGconn *conn与const char *command,返回一个PGresult类型的对象。在如下示例中,声明一个PGresult变量,并向服务器发送一个命令。读者可自行编写检查连接与否以及错误处理的代码。

PGresult *res;   res = PQexec(conn, "SELECT * FROM mydatabase");   PQclear(res);

显然这段代码无法编译,只是为了向读者展示libpq库提供的功能,而不是直接提供可用代码。不过在这段代码中,res包含了查询结果,读者可以任意对其进行解析。PQresultStatus可以查询命令的状态,该函数返回PGRES_COMMAND_OK或 PGRES_FATAL_ERROR.。可在PostgreSQL项目页面找到exec函数的一个综合列表。

下面介绍一些有用的函数,例如,PQntuples函数将给定的res作为参数,以整数类型返回表中列的数量。如果查询的状态为PGRES_TUPLES_OK,则它以PGresult对象为参数,并返回一个整型值。PQnfields函数给出每行的列数。PQfname函数返回与某数字关联的列的名字,PQfnumber函数功能则完全相反。要得到某一单元的值,需要将PGresult以及单元的列号和行号传给PQgetvalue函数。

可以看到这些函数都比较简单,但PQexec不能同时处理多个SQL命令,因为该函数只能返回一个结构,如果有多个命令,则只能返回最后一个命令的结果。另一个不足是,PQexec在执行一个命令时会一直等到命令返回,因此读者在使用该命令遇到阻塞执行时要分外小心。如果这些不足影响到读者用户的使用,可以使用其它函数代替,如PQsendQuery和PQgetResult等,可使用这些函数来进行异步查询处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某系统有6台输出设备 有多个进程均需要使用2台_系统设计硬核知识(4)——操作系统的设备管理...

在计算机系统中,除了处理器和内存之外,其他的大部分硬设备称为外部设备。它包括输入/输出设备,辅存设备及终端设备等。这些设备种类繁多,特性各异,操作方式的差异很大,从而使操作系统的设备管理变得十分繁杂…

esp8266单片机透传_基于WeMos D1(ESP8266)的校园卡门禁系统

刷卡https://www.zhihu.com/video/1107591334902345728电脑端控制https://www.zhihu.com/video/1107591363079733248手机端控制https://www.zhihu.com/video/1107591388040052736一、项目背景随着网络技术和嵌入式技术的发展,物联网开始引领新一波热潮。制作这个项目…

c语言调用android surface,Android GUI SurfaceFlinger

本文涉及的源代码基于 Android-7.1.1r。一、Android GUI 框架SurfaceFlinger 是 Android GUI 的核心,但是从 OpenGL_ES 的角度来看,它也只是个“应用程序”。Android 的显示系统大致框架图下图所示:GUI_STRUCT.png下面就“由下向上”来逐一分…

bat 取得服务列表_解读浩泽净水2018业绩:稳定增长背后的服务深化和科技跃进...

北京时间3月26日凌晨,苹果以一场没有任何硬件亮相的“软”发布会,宣告公司将向服务转型,欲以可持续的服务收入抵消iPhone遭遇的增长瓶颈。此举在大洋彼岸的中国引发了热烈反响。分析师们普遍认为苹果在“偷师”中国的BAT等互联网企业&#xf…

c语言实现多目标优化,MOPSO 多目标例子群优化算法

近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效。有代表性的多目标优化算法主要有NSGA、NSGA-II、SPEA、SPEA2、PAES和PESA等。粒子群优化(PSO)算法是一种模拟社会行为的、基于群体智能的进化技术&#xff0c…

软件工程结构化建模的方法和工具_软件工程导论知识点梳理之概念题

1. 软件的定义:软件是程序、数据及开发、使用和维护程序需要的所有文档的完整集合。例:在信息处理和计算机领域内,一般认为软件是程序、文档和数据。2.软件的分类:按照应用场景:系统/应用软件按照功能:服务…

xcode w情ndows版,xcode Windows版安装使用介绍

在Windows安装xcode进行开发iOS应用可以省去昂贵的苹果机、体验虽然没那么好,但也能用。现在也有很多APP跨平台开发工具,在Windows就能完成开发测试,但上架iOS APP还是得要Mac苹果电脑去申请iOS证书和上传IPA到App Store。苹果电脑价格昂贵&a…

esp mounter pro_对比 | 以大欺小?剑指宋Pro和哈弗H6,欧尚X7的黑马潜质从何而来?...

随着近几年国内SUV市场的火爆,各个品牌也都先后推出并持续更新着自家的紧凑型SUV产品,目前在该细分领域里,哈弗H6一直都是稳居榜首的存在,作为后起之秀的比亚迪宋Pro则紧随其后。但在长安发力战略布局后,长安欧尚X7便以…

销户c语言,c – 如何在注销时优雅地退出QApplication?

我有一个带有通知区域图标的应用程序,因此主窗口可能会忽略关闭事件.我正在尝试保存应用程序退出的首选项和历史记录.我还想在应用程序运行时处理注销.虽然应用程序是跨平台的,但它在GNU /Linux中最方便/最有用,因此Windows注销行为的关注度要低得多.这是一个用于测试不同桌面环…

randomized algorithms 有哪些_毛毯分类有哪些 毛毯的种类

毛毯分类有哪些 毛毯的种类毛毯分类有哪些 毛毯的种类 a)毛毯分为双人毛毯、单人毛毯、童毯等多种规格。 b)按用途还可以床毯、膝毯、沙滩毯等。 c)毛毯还可以进行特殊整理:阻燃毛毯、防菌整理、负离子整理等等。 d)下面我按织造方式进行介绍: 一.机织毛毯 1.按原料分 羊毛毛毯…

c语言验证24点,C语言解24点游戏程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼前几天在微博上看到24点的游戏,6 6 610。算了很久是在算不出来,最后我想我何不写一个小程序解决它?说做就做,我刚开始的想法很简单,就是列举4个数的所有可能的表达式组合&…

floodlight ovs 更改拓扑_淘宝更改类目降权多久?被降权了怎么办?_推广运营(淘宝天猫)...

现在淘宝 (淘宝论坛)店主在经营店铺的过程中,会考虑将自己特别店铺进行类目的更改,那么也有一点店主会担心到如果淘宝更改类目会被降权吗?如果被降权了怎么办呢?那就一起了解具体的内容吧!跟大家分享一些淘宝宝贝被降权的处理方式:1、虚假销…

android 事务管理软件,安卓 Android基于安卓移动终端的个人事务管理系统

摘 要随着移动平台的崛起,越来越多的传统PC软件被移植到移动平台,比如ipad,iphone,Android等智能终端设备,在这些平台中,Android占领着最大的市场份额,所以为Android用户开发满足日常使用的软件…

word无法打开请去应用商店_word软件是什么?word文档是什么?可以用来干什么?...

1、为什么需要Microsoft Word?仅在计算机上安装操作系统不足以提高生产力。无论是创建电子表格,演示文稿,电子邮件还是文档,您都需要软件来执行所需的任何活动。Microsoft Word用于创建文档或您需要存储文本的任何内容。如果您购买…

android四个按钮平分,android 水平平分两个按钮

项目中需要显示水平两个按钮,且都要有间距,如下图所示:首先我想到的是使用权重,然后利用水平布局,这样应该可以实现,但真实的情况是这样的,代码如下:android:layout_width"fill…

iPhone清理喇叭灰尘_iphone正确清理扬声器灰尘的方法

夏天来临各种各样的手机问题就都出现了,手机发热已经成为了热议话题,网上的妙招也是层出不穷甚至有销售水冷装置风扇手柄的,或者diy给手机加铜钹,又或者使用石墨烯等等的方法,但还是避免不了发热,除手机发热…

Android搭建web,Android手机搭建WEB环境

原文:http://yangshare.com/Y-BLOG/?p246#more-246准备1、下载Android处理器对应的jdk包,类似树莓派archandroidlocalhost:~$ archarmv7l下载地址:jdk-8u152-linux-arm32-vfp-hflt.tar.gz2、安装一个xftp或者宝塔面板这样的文件操作工具xftp…

qq浏览器网页版_QQ邮箱回应部分用户登录异常:系后台服务波动,问题已解决...

5月6日消息,针对用户反映QQ邮箱登录异常情况,腾讯QQ邮箱官方回应称,因后台服务波动,部分用户出现登录异常情况,目前问题已解决。5月6日上午,有网友反映QQ邮箱崩溃,换浏览器依然无法登录&#xf…

android nfc ndef mifareclassic,Android NFC开发-实践篇

Android NFC开发-实践篇https://blog..net/_GYG/article/details/72899417在Android NFC开发-理论篇中,我们了解了在Android中开发NFC的一些理论知识,这篇我们继续应用我们上一篇学到的知识,实现对NDEF格式标签和MifareClassic格式标签的读写…

苹果6换屏多钱_苹果手机屏幕碎了怎么办?维修更换要多少钱

手机在使用过程中最容易发生的意外就是手滑摔碎屏幕了,那么苹果手机屏幕碎了碎了,维修更换要多少钱?大家都知道,苹果手机摔坏,进水均属于人为损坏,人为损坏不属保修范围,接下来针对苹果手机屏幕…