在C++中进行数据库的读写通常需要使用第三方库,因为C++本身并不直接提供数据库操作的标准库。Boost库提供了一些高级的抽象和工具,使得操作更加方便和灵活。
1. 安装 Boost 库:
如果你还没有安装 Boost 库,需要先安装。Boost 提供了非常强大和广泛使用的 C++ 库集合,包括 Boost.Asio 和 Boost.Beast。
在 Ubuntu 上可以使用 sudo apt-get install libboost-all-dev 安装 Boost。
在其他系统上可以从 Boost 官网下载源码编译安装。
2. 安装 MySQL C++ Connector:
首先需要安装 MySQL C++ Connector,它是 MySQL 官方提供的 C++ 驱动程序,用于连接和操作 MySQL 数据库。
3. 编写C++代码
在这个示例中,我们假设要创建一个名为 users 的表,包含 username 和 age 字段,并插入一些示例数据。替换代码中的 username、password 和 database_name 为你自己 MySQL 数据库的连接信息。
#include <iostream>
#include <boost/asio.hpp>
#include <boost/beast.hpp>
#include <mysql_driver.h>
#include <mysql_connection.h>
using namespace boost::asio;
int main() {
try {
// 创建 Boost.Asio 的 io_context 对象
boost::asio::io_context io_context;
// 初始化 MySQL 驱动程序
sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
// 建立 MySQL 数据库连接
std::unique_ptr<sql::Connection> connection(driver->connect("tcp://localhost:3306", "username", "password"));
// 选择数据库
connection->setSchema("database_name");
// 创建表
std::unique_ptr<sql::Statement> create_statement(connection->createStatement());
create_statement->execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), age INT)");
// 插入数据
std::unique_ptr<sql::PreparedStatement> insert_statement(connection->prepareStatement("INSERT INTO users (username, age) VALUES (?, ?)"));
// 插入一些示例数据
insert_statement->setString(1, "Alice");
insert_statement->setInt(2, 30);
insert_statement->executeUpdate();
insert_statement->setString(1, "Bob");
insert_statement->setInt(2, 25);
insert_statement->executeUpdate();
// 查询数据
std::unique_ptr<sql::Statement> select_statement(connection->createStatement());
std::unique_ptr<sql::ResultSet> result_set(select_statement->executeQuery("SELECT * FROM users"));
// 处理查询结果
while (result_set->next()) {
int id = result_set->getInt("id");
std::string username = result_set->getString("username");
int age = result_set->getInt("age");
std::cout << "ID: " << id << ", Username: " << username << ", Age: " << age << std::endl;
}
} catch (std::exception& e) {
std::cerr << "Exception occurred: " << e.what() << std::endl;
return 1;
}
return 0;
}
编译和运行
编译需要链接 Boost.Asio、Boost.Beast 和 MySQL C++ Connector 库,可以使用如下命令:
g++ -o example example.cpp -lboost_system -lboost_filesystem -lmysqlcppconn
# 运行生成的可执行文件
./example