阅读量:41
在Ubuntu上,C++可以通过多种方式与数据库进行交互。以下是一些常见的方法:
1. 使用MySQL数据库
安装MySQL客户端库
首先,确保你已经安装了MySQL服务器和客户端库。
sudo apt update
sudo apt install mysql-server mysql-client
安装MySQL C++连接器
你可以使用libmysqlclient-dev包来获取MySQL C++连接器。
sudo apt install libmysqlclient-dev
编写C++代码
创建一个简单的C++程序来连接和查询MySQL数据库。
#include
#include
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
// 初始化连接
conn = mysql_init(NULL);
// 连接到数据库
if (!mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
// 执行查询
if (mysql_query(conn, "SELECT * FROM table_name")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
// 获取结果集
res = mysql_store_result(conn);
// 输出结果
while ((row = mysql_fetch_row(res)) != NULL) {
std::cout << row class="hljs-number">0] << " " << row class="hljs-number">1] << std class="hljs-comment">// 清理
mysql_free_result(res);
mysql_close(conn);
return 0;
}
编译和运行
使用g++编译你的程序,并链接MySQL库。
g++ -o myprogram myprogram.cpp -lmysqlclient
./myprogram
2. 使用PostgreSQL数据库
安装PostgreSQL客户端库
首先,确保你已经安装了PostgreSQL服务器和客户端库。
sudo apt update
sudo apt install postgresql postgresql-contrib libpq-dev
安装PostgreSQL C++连接器
你可以使用libpq-fe.h头文件来连接PostgreSQL数据库。
编写C++代码
创建一个简单的C++程序来连接和查询PostgreSQL数据库。
#include
#include
int main() {
try {
// 连接到数据库
pqxx::connection C("dbname=database user=user password=password hostaddr=127.0.0.1 port=5432");
// 创建一个事务
pqxx::work W(C);
// 执行查询
pqxx::result R = W.exec("SELECT * FROM table_name");
// 输出结果
for (auto row : R) {
std::cout << row class="hljs-number">0].as() << " " << row class="hljs-number">1].as() << std class="hljs-comment">// 提交事务
W.commit();
} catch (const std::exception &e) {
std::cerr << e class="hljs-built_in">what() << std class="hljs-keyword">return 1;
}
return 0;
}
编译和运行
使用g++编译你的程序,并链接PostgreSQL库。
g++ -o myprogram myprogram.cpp -lpqxx -lpq
./myprogram
3. 使用SQLite数据库
安装SQLite3
首先,确保你已经安装了SQLite3。
sudo apt update
sudo apt install sqlite3 libsqlite3-dev
编写C++代码
创建一个简单的C++程序来连接和查询SQLite数据库。
#include
#include
static int callback(void *data, int argc, char **argv, char **azColName) {
for (int i = 0; i < argc class="hljs-string">": " << (argv[i] ? argv[i] : "NULL") << std class="hljs-keyword">return 0;
}
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc;
// 打开数据库
rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
std::cerr << "Cannot open database: " << sqlite3_errmsg(db) << std class="hljs-built_in">sqlite3_close(db);
return 1;
}
// 执行查询
rc = sqlite3_exec(db, "SELECT * FROM table_name", callback, 0, &err_msg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << err class="hljs-built_in">sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
// 关闭数据库
sqlite3_close(db);
return 0;
}
编译和运行
使用g++编译你的程序,并链接SQLite库。
g++ -o myprogram myprogram.cpp -lsqlite3
./myprogram
这些示例展示了如何在Ubuntu上使用C++与不同类型的数据库进行交互。根据你的具体需求选择合适的数据库和连接方式。