温馨提示×

linux c++如何连接数据库

小樊
46
2026-09-20 10:26:14
栏目: 编程语言

在 Linux 下用 C++ 连接数据库,常见方式有以下几种,具体取决于你使用的数据库类型(MySQL、PostgreSQL、SQLite 等)。下面以最常见的情况为例说明。


一、连接 MySQL(最常用)

1. 安装 MySQL 开发库

sudo apt update
sudo apt install libmysqlclient-dev   # Ubuntu/Debian
# 或
sudo yum install mysql-devel          # CentOS

2. 示例代码(使用 MySQL C API)

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

3. 编译

g++ main.cpp -o test -lmysqlclient

二、连接 PostgreSQL

1. 安装库

sudo apt install libpq-dev

2. 示例代码

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

3. 编译

g++ main.cpp -o test -lpq

三、连接 SQLite(轻量、无服务)

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

四、使用现代 C++ 库(推荐)

1. SOCI(支持多种数据库)

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

如果你能告诉我:

  • 使用的 数据库类型
  • 是否允许 第三方库
  • 是 嵌入式还是服务端程序

我可以给你更精确的示例和工程结构。

0 踩