在 Linux 下用 C++ 连接数据库,常见方式有以下几种,具体取决于你使用的数据库类型(MySQL、PostgreSQL、SQLite 等)。下面以最常见的情况为例说明。
sudo apt update
sudo apt install libmysqlclient-dev # Ubuntu/Debian
# 或
sudo yum install mysql-devel # CentOS
#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",
"dbname",
0, nullptr, 0)) {
std::cerr << mysql_error(conn) << std::endl;
return 1;
}
std::cout << "Connected to MySQL!\n";
mysql_query(conn, "SELECT NOW();");
MYSQL_RES *res = mysql_store_result(conn);
MYSQL_ROW row = mysql_fetch_row(res);
std::cout << row[0] << std::endl;
mysql_free_result(res);
mysql_close(conn);
return 0;
}
g++ main.cpp -o test -lmysqlclient
sudo apt install libpq-dev
#include <libpq-fe.h>
#include <iostream>
int main() {
PGconn *conn = PQconnectdb("host=localhost dbname=test user=user password=pass");
if (PQstatus(conn) != CONNECTION_OK) {
std::cerr << PQerrorMessage(conn) << std::endl;
return 1;
}
PGresult *res = PQexec(conn, "SELECT now();");
std::cout << PQgetvalue(res, 0, 0) << std::endl;
PQclear(res);
PQfinish(conn);
return 0;
}
g++ main.cpp -o test -lpq
sudo apt install libsqlite3-dev
#include <sqlite3.h>
#include <iostream>
int main() {
sqlite3 *db;
if (sqlite3_open("test.db", &db)) {
std::cerr << sqlite3_errmsg(db) << std::endl;
return 1;
}
std::cout << "SQLite connected\n";
sqlite3_close(db);
}
编译:
g++ main.cpp -o test -lsqlite3
sudo apt install libsoci-dev
#include <soci/soci.h>
#include <soci/mysql/soci-mysql.h>
#include <iostream>
int main() {
soci::session sql(soci::mysql, "db=test user=user password=pass");
std::string now;
sql << "SELECT NOW()", soci::into(now);
std::cout << now << std::endl;
}
| 数据库 | 推荐方式 |
|---|---|
| MySQL | MySQL C API / SOCI |
| PostgreSQL | libpq / SOCI |
| SQLite | sqlite3 |
| 多数据库 | SOCI / ODBC |
如果你能告诉我:
我可以给你更精确的示例和工程结构。