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;
}
程序運行結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章