温馨提示×

ubuntu c++怎么连接数据库

小樊
36
2026-10-02 10:53:53
栏目: 编程语言

在 Ubuntu 下用 C++ 连接数据库,常见方案有:

  • MySQL:用 MySQL C API 或 MySQL Connector/C++
  • PostgreSQL:用 libpq
  • SQLite:用 SQLite3(无需服务,适合本地)
  • 通用方案:用 ODBC

下面给你几个最常用、可直接跑的示例。


一、C++ 连接 MySQL(最常用)

1. 安装依赖

sudo apt update
sudo apt install libmysqlclient-dev

2. 示例代码(MySQL C API)

#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;
}

3. 编译

g++ main.cpp -o test -lmysqlclient

二、C++ 连接 SQLite(最简单)

1. 安装

sudo apt install libsqlite3-dev

2. 示例

#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);
}

3. 编译

g++ main.cpp -o test -lsqlite3

三、C++ 连接 PostgreSQL

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++)

如果你不想用裸 C API:

  • MySQL:MySQL Connector/C++
  • ORM:
    • ODB
    • SOCI
    • sqlpp11

五、你用的是哪种数据库?

你可以告诉我:

  • 数据库类型(MySQL / PostgreSQL / SQLite)
  • 是否是 Ubuntu 桌面 or 服务器
  • 是否需要 ORM / 线程安全 / 连接池

我可以直接给你完整可运行项目结构。

0 踩