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;
}
程序运行结果: