在 Ubuntu 下用 C++ 连接数据库,常见方案有:
下面给你几个最常用、可直接跑的示例。
sudo apt update
sudo apt install libmysqlclient-dev
#include <mysql/mysql.h>
#include <iostream>
int main() {
MYSQL *conn = mysql_init(nullptr);
if (!conn) {
std::cerr << "init failed\n";
return 1;
}
if (!mysql_real_connect(conn,
"localhost",
"user",
"password",
"testdb",
0, nullptr, 0)) {
std::cerr << mysql_error(conn) << "\n";
return 1;
}
if (mysql_query(conn, "SELECT * FROM users")) {
std::cerr << mysql_error(conn) << "\n";
}
MYSQL_RES *res = mysql_store_result(conn);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
std::cout << row[0] << " " << row[1] << "\n";
}
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) != SQLITE_OK) {
std::cerr << "open failed\n";
return 1;
}
sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS t(id INTEGER, name TEXT);", nullptr, nullptr, nullptr);
sqlite3_exec(db, "INSERT INTO t VALUES(1,'tom');", nullptr, nullptr, nullptr);
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "SELECT * FROM t;", -1, &stmt, nullptr);
while (sqlite3_step(stmt) == SQLITE_ROW) {
std::cout << sqlite3_column_int(stmt, 0) << " "
<< sqlite3_column_text(stmt, 1) << "\n";
}
sqlite3_finalize(stmt);
sqlite3_close(db);
}
g++ main.cpp -o test -lsqlite3
sudo apt install libpq-dev
#include <libpq-fe.h>
#include <iostream>
int main() {
PGconn *conn = PQconnectdb("host=localhost dbname=test user=postgres password=123456");
if (PQstatus(conn) != CONNECTION_OK) {
std::cerr << PQerrorMessage(conn) << "\n";
return 1;
}
PGresult *res = PQexec(conn, "SELECT * FROM users;");
int rows = PQntuples(res);
for (int i = 0; i < rows; i++) {
std::cout << PQgetvalue(res, i, 0) << "\n";
}
PQclear(res);
PQfinish(conn);
}
编译:
g++ main.cpp -o test -lpq
如果你不想用裸 C API:
你可以告诉我:
我可以直接给你完整可运行项目结构。