WIN10环境下VS2019C++访问PostgreSQL数据库及增删查改语句

VS环境配置

1. 项目 -> 属性页,链接器输入附加依赖(libpq.lib);



2. 配置包含目录(include),点击编辑进入,找到postgresql的安装目录,选择include文件即可;



3. 配置库目录(lib),点击编辑进入,找到postgresql的安装目录,选择lib文件即可;


4. 链接器输入附加依赖(libpq.lib),点击编辑进入,在红框位置输入libpq.lib即可;



5. 在postgresql安装目录的bin文件夹中找到libcrypto-1_1-x64libiconv-2.dlllibintl-8.dlllibpq.dlllibssl-1_1-x64.dll,导入工程目录;


6. 在要使用到数据库的cpp文件中假如头文件#include <libpq-fe.h>

连接数据库

1. 如何建立数据库不在该文章中,请自行搜索;

2. 代码,详细解释请看注释

//host一般是127.0.0.1,dbname是需要连接数据库的名字,user和password是创建数据库时或后续添加的用户名和密码
PGconn* conn = PQconnectdb("host=127.0.0.1 dbname=XXX user=XXX password=XXX");
//一般情况下,连接已经成功,但是还是需要进行一下判断
//PQstatus(conn)判断连接状态,CONNECTION_BAD为状态参数
//PQerrorMessage(conn)为连接的错误信息
//PQfinish(conn)结束连接
//想要详细了解函数方法和状态参数含义,可以按ctrl的同时,鼠标点击该函数或参数即可查看
if (PQstatus(conn) == CONNECTION_BAD) {
    cout << PQerrorMessage(conn) << endl;
    PQfinish(conn);
}

增删查改语句

注意不同语句需要判断错误的函数不一定相同

1. 增,INSERT

//制作sql语句
//注意假如要加入的是int类型,可使用to_string(int)函数转换成string类型
//字段为varchar等,要使用单引号;字段为int等数字,不用使用单引号
string sqlStr = "INSERT INTO table (XXX) VALUES(" + XXX + ")";
char* sql = const_cast<char*>(sqlStr.c_str());

//PQexec执行语句
PGresult* res = PQexec(conn, sql);
//PQresultStatus(res)是获取结果的状态,PGRES_COMMAND_OK是状态参数
//PQresultErrorMessage(res)可以获取错误信息
//PQclear(res)是清除res,不然会内存泄漏
//想要详细了解函数方法和状态参数含义,可以按ctrl的同时,鼠标点击该函数或参数即可查看
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
    cout << PQresultErrorMessage(res) << endl;
    PQclear(res);
    return;
}

2. 删,DELETE

string sqlStr = "DELETE FROM table WHERE XXX = " + XXX + ";";
char* sql = const_cast<char*>(sqlStr.c_str());
PGresult* res = PQexec(conn, sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
    cout << PQresultErrorMessage(res) << endl;
    PQclear(res);
    return;
}

3. 查,SELECT

 PGresult* res = PQexec(conn, "SELECT XX1, XX2, FROM table");
//注意这里的状态参数和其余三个基本语句不相同
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
    cout << PQresultErrorMessage(res) << endl;
    PQclear(res);
    return;
}
//PQntuples(res)是行数
//PQnfields(res)是列数
//PQgetvalue(res, i, j)是取值函数
for (int i = 0; i < PQntuples(res); i++) {
    for (int j = 0; j < PQnfields(res); j++)
          cout << PQgetvalue(res, i, j) << " ";
}
PQclear(res);
//如果明确只有一个字段的一个元组返回
//可以直接使用PQgetvalue(res, 0, 0)

4. 改,UPDATE

string sqlStr = "UPDATE table SET XXX = " + XXX + ";";
char* sql = const_cast<char*>(sqlStr.c_str());
PGresult* res = PQexec(conn, sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
    cout << PQresultErrorMessage(res) << endl;
    PQclear(res);
    return;
}
posted @ 2020-06-17 00:46  肥斯大只仔  阅读(2124)  评论(1编辑  收藏  举报