C语言通过libpq库操作PostgreSQL数据库时,使用INSERT语句插入数据后,获取新插入记录的serial自动编号字段的值

idtest表的结构:

其中id字段为自动编号字段,name字段用于保存程序中用户输入的内容,adding_time字段用于保存记录的插入时间。

#include <libpq-fe.h>
#include <string.h>

#pragma comment(lib, "libpq.lib")

void test(PGconn *conn)
{
	char buffer[30];
	char *p = buffer; // 变量buffer本身无法取地址, 所以定义一个和buffer相同的p指针, p可以取地址
	ExecStatusType status;
	int n;
	PGresult *res;

	printf("请输入用户名: ");
	fgets(buffer, sizeof(buffer), stdin);
	n = (int)strlen(buffer) - 1;
	if (buffer[n] == '\n') // 去掉最后的换行符
		buffer[n] = '\0';

	res = PQexecParams(conn, "INSERT INTO idtest (name) VALUES ($1) RETURNING id", 1, NULL, &p, NULL, NULL, 0);
	status = PQresultStatus(res);
	if (status == PGRES_TUPLES_OK)
		printf("添加用户成功! 新用户的ID号为: %s\n", PQgetvalue(res, 0, 0));
	else
		printf("%s", PQresultErrorMessage(res));
	PQclear(res);
}

int main(void)
{
	ConnStatusType status;
	PGconn *conn;

	conn = PQconnectdb("postgresql://localhost/mydb");

	status = PQstatus(conn);
	if (status == CONNECTION_OK)
	{
		printf("连接数据库成功!\n");
		test(conn);
	}
	else if (status == CONNECTION_BAD)
		printf("连接数据库失败!\n");

	PQfinish(conn);
	return 0;
}
程序运行结果:


猜你喜欢

转载自blog.csdn.net/zlk1214/article/details/80805672