在 Ubuntu 上使用 C++ 连接数据库,常见做法取决于你用的数据库类型。下面以 MySQL 和 SQLite 为例,给你最常用、最实用的方案。
sudo apt update
sudo apt install mysql-server
sudo apt install libmysqlclient-dev
Ubuntu 20.04+ 可能是:
sudo apt install libmysqlclient-dev
# 或
sudo apt install libmariadb-dev
#include <mysql/mysql.h>
#include <iostream>
int main() {
MYSQL* conn = mysql_init(nullptr);
if (!conn) {
std::cerr << "mysql_init failed\n";
return 1;
}
if (!mysql_real_connect(conn,
"localhost",
"user",
"password",
"testdb",
0, nullptr, 0)) {
std::cerr << mysql_error(conn) << std::endl;
return 1;
}
if (mysql_query(conn, "SELECT * FROM users")) {
std::cerr << mysql_error(conn) << std::endl;
return 1;
}
MYSQL_RES* res = mysql_store_result(conn);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
std::cout << row[0] << " " << row[1] << std::endl;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
g++ main.cpp -o test -lmysqlclient
sudo apt install libsqlite3-dev
#include <sqlite3.h>
#include <iostream>
int main() {
sqlite3* db;
if (sqlite3_open("test.db", &db)) {
std::cerr << "Can't open database\n";
return 1;
}
const char* sql = "SELECT * FROM users;";
sqlite3_exec(db, sql, [](void*, int argc, char** argv, char**) {
for (int i = 0; i < argc; i++)
std::cout << argv[i] << " ";
std::cout << std::endl;
return 0;
}, nullptr, nullptr);
sqlite3_close(db);
return 0;
}
g++ main.cpp -o test -lsqlite3
例如 MySQL Connector/C++:
sudo apt install libmysqlcppconn-dev
| 场景 | 推荐 |
|---|---|
| 本地小项目 | SQLite |
| 服务端应用 | MySQL / PostgreSQL |
| 高性能 | PostgreSQL + libpqxx |
| 跨平台 | ODBC |
如果你告诉我:
我可以直接给你一份可运行项目模板。