linux

Linux下C++如何进行数据库连接

小樊
32
2025-07-28 06:16:57
栏目: 编程语言

在Linux下使用C++连接数据库,通常有以下几种方式:

  1. 使用MySQL C API: MySQL官方提供了一个C语言编写的API,可以用于连接和操作MySQL数据库。首先需要安装MySQL的开发库,然后使用以下代码示例进行连接:
#include <mysql/mysql.h>
#include <iostream>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    conn = mysql_init(NULL);

    if (!mysql_real_connect(conn, "localhost", "username", "password", "database_name", 0, NULL, 0)) {
        std::cerr << "Error: unable to connect to database" << std::endl;
        exit(1);
    }

    if (mysql_query(conn, "SHOW TABLES")) {
        std::cerr << "Error: query failed" << std::endl;
        exit(1);
    }

    res = mysql_store_result(conn);

    while ((row = mysql_fetch_row(res))) {
        std::cout << row[0] << std::endl;
    }

    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}
  1. 使用SQLite C/C++ API: SQLite是一个轻量级的嵌入式数据库,它的API支持C和C++。首先需要安装SQLite的开发库,然后使用以下代码示例进行连接:
#include <sqlite3.h>
#include <iostream>

static int callback(void *data, int argc, char **argv, char **azColName) {
    for (int i = 0; i < argc; i++) {
        std::cout << azColName[i] << ": " << (argv[i] ? argv[i] : "NULL") << std::endl;
    }
    std::cout << std::endl;
    return 0;
}

int main() {
    sqlite3 *db;
    char *err_msg = 0;
    int rc;

    rc = sqlite3_open("test.db", &db);

    if (rc != SQLITE_OK) {
        std::cerr << "Error: unable to open database" << std::endl;
        sqlite3_close(db);
        exit(1);
    }

    rc = sqlite3_exec(db, "SELECT * FROM users", callback, 0, &err_msg);

    if (rc != SQLITE_OK) {
        std::cerr << "Error: query failed" << std::endl;
        sqlite3_free(err_msg);
        sqlite3_close(db);
        exit(1);
    }

    sqlite3_close(db);

    return 0;
}
  1. 使用第三方库: 还有一些第三方库可以用于连接数据库,例如MySQL++、SOCI等。这些库通常提供了更高级的抽象和更好的易用性。以MySQL++为例,首先需要安装MySQL++的开发库,然后使用以下代码示例进行连接:
#include <mysql++.h>
#include <iostream>

int main() {
    mysqlpp::Connection conn(false);

    if (conn.connect("database_name", "localhost", "username", "password")) {
        std::cout << "Connected to database" << std::endl;
    } else {
        std::cerr << "Error: unable to connect to database" << std::endl;
        exit(1);
    }

    mysqlpp::Query query = conn.query();
    query << "SELECT * FROM users";
    mysqlpp::StoreQueryResult result = query.store();

    for (size_t i = 0; i < result.num_rows(); ++i) {
        std::cout << result[i]["username"] << std::endl;
    }

    return 0;
}

注意:在使用这些库之前,请确保已经安装了相应的开发库和头文件。在编译时,需要链接相应的库文件。例如,对于MySQL C API,可以使用-lmysqlclient选项进行链接。

0
看了该问题的人还看了