微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C基于 postgresql-devel 连接postgresql 数据库,实现增删改查的代码封装

  • yum install postgresql-devel 安装连接postgresql 相关的库
  • 编写 main.c
  • 使用 gcc -g main.c -o main -I /usr/include -L /usr/lib64 -lpq 编译, 参数详解
  • ./main.exe 执行

2. main.c

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/** yum install postgresql-devel */
#include <libpq-fe.h>
#include <string.h>
const char *conninfo="host=192.168.31.140 dbname=sfang user=postgres password=13673711016";
void displayResult(const PGresult *res)
{
	assert(NULL != res);

	int nfields = PQnfields(res);
	int ntuples = PQntuples(res);
    if(0 == ntuples || 0 == ntuples) { return ;} 
	int rows = 0;
	int cols = 0;
	for (cols = 0; cols < nfields; ++cols)
	{
		fprintf(stdout, "| %s", PQfname(res, cols));
	}
	fprintf(stdout, "|\n");

	for (rows = 0; rows < ntuples; ++rows)
	{
		for (cols = 0; cols < nfields; ++cols)
		{
			fprintf(stdout, "| %s", PQgetvalue(res, rows, cols));
		}
		fprintf(stdout, "|\n");
	}
}

PGconn * getConnection() {
    PGconn *conn = PQconnectdb(conninfo);
    if(PQstatus(conn) == CONNECTION_BAD)
    {
       fprintf(stderr,"connection to %s Failed \n",conninfo);
       exit(-1);
    }
    return conn;
}
/** create table or update table sql */
int execsql(const char * sql, void * fun_sucess_name) {    
    PGconn *conn = getConnection();
    PGresult *res;
    res = PQexec(conn, sql);
    if (PGRES_TUPLES_OK != PQresultStatus(res)){
        fprintf(stderr, "#ERR-PGsql: sql exec Failed : %s \n", PQerrorMessage(conn));
        PQclear(res);          
    }else {
        if(NULL != fun_sucess_name) {
            void (* fun_sucess)(const PGresult *res) = fun_sucess_name;
            fun_sucess(res);
        }
    }
    PQfinish(conn);
}

//gcc -g main.c -o main -I /usr/include -L /usr/lib64 -lpq
int main(int argc, char const *argv[])
{
    // execsql( "CREATE TABLE c_test_table("  \
    //             "ID INT PRIMARY KEY     NOT NULL," \
    //             "NAME           TEXT    NOT NULL," \
    //             "AGE            INT     NOT NULL," \
    //             "ADDRESS        CHAR(50)," \
    //             "SALARY         REAL );", NULL);

    execsql("select * from c_test_table", displayResult);

    execsql("update c_test_table set address = '南京市1' where id = 1;", displayResult);

    execsql("select * from c_test_table  where id = 1", displayResult);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐