引言:为什么C++开发者需要数据库?
C++是最强大的编程语言之一,用于构建高负载系统、游戏、金融应用和嵌入式软件。然而,任何严肃的应用都需要数据存储。这时,数据库管理系统(DBMS)就派上了用场。
在本文中,我们将探讨如何使用C++连接并执行两种流行数据库——关系型PostgreSQL和文档型MongoDB——的基本操作。本文面向已掌握C++基础但尚未接触过数据库的初级开发者。您将学习如何安装所需库、编写简单的CRUD查询以及避免常见错误。
1. 环境准备与库的选择
在编写代码之前,需要安装用于操作数据库的客户端库。C++有多种选择,但我们将介绍最流行且稳定的两种:
- 针对PostgreSQL —
libpqxx(libpq的官方C++封装)。 - 针对MongoDB —
mongocxx(MongoDB官方C++驱动)。
安装libpqxx(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install libpqxx-dev
对于Windows或macOS,请使用vcpkg或Homebrew包管理器。
安装mongocxx
首先安装基础驱动mongo-c-driver,然后安装C++驱动:
# Ubuntu
sudo apt-get install libmongoc-dev libbson-dev
sudo apt-get install libmongocxx-dev
安装后,确保编译器能找到头文件。编译时不要忘记指定链接标志:
g++ -std=c++17 main.cpp -lpqxx -lpq -lmongocxx -lbson
2. 在C++中使用PostgreSQL
PostgreSQL是一个强大的对象关系型数据库管理系统。我们将使用libpqxx库,它提供了便捷的C++接口。
连接服务器并创建表
首先编写一个简单的程序,连接到本地数据库并创建用户表:
#include <iostream>
#include <pqxx/pqxx>
int main() {
try {
// 以用户"postgres"身份连接到数据库"testdb"
pqxx::connection conn("host=localhost dbname=testdb user=postgres password=secret");
if (conn.is_open()) {
std::cout << "成功连接到PostgreSQL!" << std::endl;
}
// 创建事务
pqxx::work txn(conn);
// 创建表的SQL查询
txn.exec("CREATE TABLE IF NOT EXISTS users ("
"id SERIAL PRIMARY KEY,"
"name VARCHAR(100) NOT NULL,"
"email VARCHAR(100) UNIQUE NOT NULL);");
txn.commit(); // 提交更改
std::cout << "users表已创建。" << std::endl;
} catch (const std::exception &e) {
std::cerr << "错误: " << e.what() << std::endl;
}
return 0;
}
CRUD操作:插入和读取数据
添加一些记录并执行查询:
pqxx::work txn(conn);
// 插入数据
txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);",
"伊万·彼得罗夫", "ivan@example.com");
txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);",
"玛丽亚·斯米尔诺娃", "maria@example.com");
txn.commit();
// 读取数据
pqxx::nontransaction ntxn(conn);
pqxx::result result = ntxn.exec("SELECT id, name, email FROM users;");
for (auto row : result) {
std::cout << "ID: " << row[0].as<int>()
<< ", 姓名: " << row[1].as<std::string>()
<< ", 邮箱: " <<