草履虫都能学会的简易VS环境配置pqxx教程

PQXX是基于libpq加以封装, 进行C++风格重写的Postgres数据库API, 接下来介绍如何在Visual Studio 中配置使用PQXX

在此之前你需要安装postgres数据库软件, 关于安装PG的教程有非常多, 这里不作过多介绍.

首先你需要在Github上下载并解压pqxx的压缩包, 值得一提的是, 如果你不希望使用或碍于某些限制而不使用C++17及之后的新标准, 请你一定不要下载pqxx-master版本或pqxx-7.0之后的版本, 

笔者使用的是6.3版本, 其可以在C++14标准下进行编译运行. 

在你下载并解压完成后,  你需要创建一个文件夹,名为build. 

接下来的过程是你应该掌握并熟悉的过程----用CMAKE去编译他 

将第一个目录定位到解压好的文件夹下, 第二个目录定位到build文件夹下, 如果你之前忘了创建build文件夹, 这也没有关系, Cmake会提示是否需要帮助你生成一个

之后你应该点击Configure, 然后按照你自己的情况去选择这些选项. 点击Finish之后Cmake会帮你进行编译, 如果这里Camke提示出现了一些问题, 首先检查你的Cmake版本是否过于老旧. 之后可以在上方的Github网址中下滑寻找帮助.

在configure结束后, 你可以直接点击generate以生成解决方案.sln文件

我们返回到刚刚创建的build文件夹, 里面多了非常多东西, 但其中许多是我们不需要在乎的

现在我们需要打开libpqxx.sln文件 

 在Debug-x64模式下右键ALLBUILD, 选择生成(这个过程可能会持续2分钟)

 同样地, 在Release-x64模式下再生成一次

如果这其中有一些子工程失败了, 不必担心, 我们只需要检查build->src->Debug 和 Release目录下是否生成了pqxx.lib和pqxx.dll文件, 如果没有生成这两个文件, 请考虑换一个更旧的libpqxx版本进行

将Debug目录下的pqxx.lib和pqxx.dll,pqxx.exp分别改名为pqxxd.lib, pqxxd.dll,pqxxd.exp以区分debug和release模式下生成的不同文件.

接下来将build->include下的pqxx文件夹里面的内容复制到libpqxx-x.x->include->pqxx下

 接下来我们创建一个VS工程, 做一个小Demo来测试我们环境配置的正确性

在项目->属性->包含目录中添加libpqxx-x.x/include/路径

完成后测试一下能否正确包含这个文件(你可以将libpqxx-x.x->include文件夹的内容全部复制到VS的默认包含目录下, 即C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include, 这样你不需要更改属性中的包含目录, 但如果你不熟悉这类操作, 请不要这样做). 

之后在你的工程文件夹下创建一个lib文件夹, 将之前生成的pqxxd.lib, pqxx.pdb, pqxxd.exp, pqxx.lib pqxx.exp复制到lib文件夹下

 

继续打开属性页, 将库目录改为lib\

 在链接器->常规的附加库目录中也添加一条lib\

 在链接器->输入->附加依赖项添加一条pqxxd.lib

注意, 配置上方的配置和平台, 平台要选择x64, 配置为Debug时添加一条pqxxd.lib, 配置为release时添加pqxx.lib, 并且当你更改配置的时候你需要重新修改引用目录和附加库目录

我们编写一个小Demo去连接数据库, 其中ConnectInfo中的host表示服务器址, 本地为::1(ipv6)或127.0.0.1(ipv4), user, dbname, password是你需要修改的

#include<pqxx/pqxx>
#include<iostream>

int main() {
	std::string ConnectInfo("host=::1 user=postgres dbname=postgres password=lyx20021020");
	try {
		pqxx::connection _conn(ConnectInfo);
		if (_conn.is_open()) {
			std::cout << "OPEN_SUCCESS!" << std::endl;
		}
		else {
			std::cout << "OPEN_FAILURE" << std::endl;
		}
	}
	catch (std::exception& e) {
		std::cout << e.what();
	}
	return 0;
}

 运行之后会出现这种情况

 不用担心, 将刚刚生成的dll文件拷贝到Demo->x64->Debug文件夹下并改名为pqxx.dll(如果是Release模式下拷贝生成的pqxx.dll到release文件夹下) 

 再次运行可以得到如下提示

我们找到安装PostgreSQL的位置 进入12->bin文件夹下, 由于程序运行所依赖的动态链接库不止如上提示的一个, 所以我建议你可以把所有的lib开头, dll结尾的文件全部拷贝到刚刚的debug/release目录下, 之后你可以慢慢研究哪些库是冗余的.

我们再运行一次程序

 

他成功了

接着我们进行一次简单的查询, 如果你有学习过数据库相关的知识, 你应该知道查询语句是什么 

(注意这里将if和else中的内容调换了一下)

#include<pqxx/pqxx>
#include<iostream>

int main() {
	std::string ConnectInfo("host=::1 user=postgres dbname=postgres password=lyx20021020");
	try {
		pqxx::connection _conn(ConnectInfo);
		if (! _conn.is_open()) {
			std::cout << "OPEN_FAILURE" << std::endl;
		}
		else {
			std::cout << "OPEN_SUCCESS!" << std::endl;
			pqxx::work w(_conn);
			pqxx::result res = w.exec("Select* From Student;");
			for (auto row = res.cbegin(); row != res.cend(); ++row) {
				for (auto row_iter = row.cbegin(); row_iter != row.cend(); ++row_iter) {
					std::cout << row_iter->c_str() << '\t';
				}
			}
            work.commit();
		}
	}
	catch (std::exception& e) {
		std::cout << e.what();
	}
	return 0;
}

 点击运行你可能会发现输出的是乱码

具体的原因在这里不作过多介绍, 你只需要知道这是由于字符集不一致的问题 

你需要在这里将字符集设置为Unicode 

并且在连接之后先执行一条这样的语句"Set client_encoding to 'GBK';"

这样你就可以得到正确的输出了

完整的源代码如下所示:

#include<pqxx/pqxx>
#include<iostream>

int main() {
	std::string ConnectInfo("host=::1 user=postgres dbname=postgres password=lyx20021020");
	try {
		pqxx::connection _conn(ConnectInfo);
		if (! _conn.is_open()) {
			std::cout << "OPEN_FAILURE" << std::endl;
		}
		else {
			std::cout << "OPEN_SUCCESS!" << std::endl;
			pqxx::work w(_conn);
			w.exec("Set client_encoding to 'GBK';");
			pqxx::result res = w.exec("Select* From Student;");
			for (auto row = res.cbegin(); row != res.cend(); ++row) {
				for (auto row_iter = row.cbegin(); row_iter != row.cend(); ++row_iter) {
					std::cout << row_iter->c_str() << '\t';
				}
			}
		}
	}
	catch (std::exception& e) {
		std::cout << e.what();
	}
	return 0;
}

 这样以来, 你就学会了如何配置pqxx库以及写一个简单的查询语句并且得到查询结果. 得益于迭代器算法, 你几乎可以在任何情况下这样去访问执行查询语句所返回的结果.

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值