C示例
MemFire Cloud 提供Python、Java、spring、golang、node.js、C++、C#、小程序开发示例,讲述如何编译执行程序,帮助用户如何采用多种语言来使用连接MemFire Cloud的云数据库。
MemFireDB兼容PostgreSQL11.2,采用C语言连接 MemFire Cloud云数据库构建应用程序,则需使用 libpq C 驱动程序。接下来我们会介绍如何编写C程序,通过 libpq C驱动来连接访问MemFire Cloud云数据库。
安装libpq C驱动程序
libpq C是用于连接到 PostgreSQL 数据库并与之交互的 C 客户端库。有关该库的详细介绍文档,可以参考:https://www.postgresql.org/docs/11/libpq.html
① 不同环境下,可根据官方文档下载PostgreSQL库和源代码地址:https://www.postgresql.org/download/。
② linux环境下,可以使用如下命令安装连接postgresql 相关的库libpq C库。
yum install postgresql-devel
更多示例可以查看:https://www.postgresql.org/docs/11/libpq-example.html
创建MemFire Cloud云数据库
登录MemFire Cloud平台,新建数据库,在数据库管理栏中,点击该数据库的“连接信息”,如下图所示,可以获得该数据库的连接配置信息。
编写程序
依赖条件:gcc 4.1.2 或更高版本;
1、新建文件test.c,并编写test.c文件,代码如下:
备注说明:使用新创建的数据库连接信息替换以下代码中的数据库配置信息,包括数据库连接IP、端口、用户名、密码、数据库名称;
使用libpq的客户端程序必须包含头文件libpq-fe.h
,并且必须与libpq库链接。
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
int
main(int argc, char **argv)
{
const char *conninfo;
PGconn *conn;
PGresult *res;
int nFields;
int i, j;
/* connection string */
conninfo = "host=xx.xx.xx.xx port=5433 dbname=db338ea9abb2ed4fadb2cc228002f58899test0905 user=xxxx password=xxx@";
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
/* Drop table if exists */
res = PQexec(conn, "DROP TABLE IF EXISTS public.employee");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DROP TABLE failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
PQclear(res);
printf("Drop table employee\n");
/* Create table */
res = PQexec(conn, "CREATE TABLE public.employee (id int PRIMARY KEY, \
name varchar, age int, \
department text NOT NULL)");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "CREATE TABLE failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
PQclear(res);
printf("Created table employee\n");
/* Insert a row */
res = PQexec(conn, "INSERT INTO public.employee (id, name, age, department) \
VALUES (1, 'liming', 26, 'Sales')");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "INSERT failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
PQclear(res);
printf("Inserted data (1, 'liming', 26, 'Sales')\n");
/* Query the row */
res = PQexec(conn, "SELECT name, age, department FROM public.employee WHERE id = 1");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}
/* print out the rows */
nFields = PQnfields(res);
for (i = 0; i < PQntuples(res); i++)
{
printf("Query returned: ");
for (j = 0; j < nFields; j++)
printf("%s ", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
return 0;
}
执行查看结果
执行如下命令进行编译
[root@localhost test]# gcc -g test.c -o test -I /usr/include -L /usr/lib64 -lpq
-
-I 是 libpq-fe.h 头文件所在目录
-
-L 是 libpq-fe 对应 .so 文件所在目录
-
-l 是 libpq-fe 对应的 .so 文件, libpq-fe对应的文件为 libpq.so, 则写为 -lpq
-
-g 是 编译的时候会包含调试信息, 使用gdb可以调试源代码
查询执行结果
[root@localhost test]# ./test
Created table employee
Inserted data (1, 'John', 35, 'Sales')
Query returned: John 35 Sales