在Linux环境下使用C/C++编程连接并操作数据库


在Linux环境下使用C/C++编程连接并操作数据库

在Linux环境中,通过C或C++编程语言进行数据库操作,通常需要借助一些数据库驱动库来与不同的数据库进行通信。不同的数据库提供了各自的C API接口,本文将分别介绍如何在C或C++中连接并操作常见的数据库,包括MySQL/MariaDB、PostgreSQL、SQLite以及通过ODBC进行通用数据库访问。每种数据库连接方式都会附带示例代码及注释,帮助开发者更好地理解和实践。


1. MySQL/MariaDB

MySQL提供了官方的C API来与MySQL或MariaDB数据库交互。MariaDB与MySQL兼容,因此相同的API和操作也适用于MariaDB数据库。

安装开发库

首先,需要安装MySQL的开发库以便能够使用相应的C API:

sudo apt-get install libmysqlclient-dev  # 对于Ubuntu/Debian系统
sudo yum install mysql-devel             # 对于CentOS/RHEL系统
示例代码

以下是一个使用MySQL C API连接MySQL数据库并执行查询的示例代码,附带详细的注释。

#include <mysql/mysql.h>  // 包含MySQL C API的头文件
#include <stdio.h>        // 标准输入输出库
#include <stdlib.h>       // 标准库,提供内存分配、进程控制等函数

int main() {
    MYSQL *conn;          // MySQL连接句柄
    MYSQL_RES *res;       // 用于存储查询的结果集
    MYSQL_ROW row;        // 用于存储查询结果中的一行数据

    // 定义数据库连接的参数
    const char *server = "localhost";   // 数据库服务器地址
    const char *user = "your_username"; // 数据库用户名
    const char *password = "your_password"; // 数据库密码
    const char *database = "your_database"; // 要操作的数据库名

    // 初始化MySQL连接句柄
    conn = mysql_init(NULL);

    // 尝试连接到数据库
    if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
        // 如果连接失败,打印错误信息并退出
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 发送SQL查询语句
    if (mysql_query(conn, "SELECT * FROM your_table")) {
        // 如果查询失败,打印错误信息并退出
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 获取查询结果
    res = mysql_store_result(conn);

    // 遍历结果集中的每一行,并输出第一列的数据
    while ((row = mysql_fetch_row(res)) != NULL)
        printf("%s \n", row[0]);

    // 释放结果集
    mysql_free_result(res);

    // 关闭数据库连接
    mysql_close(conn);

    return 0;
}
编译代码

编译该程序时,需要链接MySQL的客户端库:

gcc -o mysql_example mysql_example.c `mysql_config --cflags --libs`

2. PostgreSQL

PostgreSQL提供了libpq库来支持通过C语言与数据库进行交互。libpq是PostgreSQL的C API库,适用于与PostgreSQL进行高效通信。

安装开发库

使用以下命令安装PostgreSQL的开发库:

sudo apt-get install libpq-dev  # 对于Ubuntu/Debian系统
sudo yum install postgresql-devel  # 对于CentOS/RHEL系统
示例代码

以下是一个通过libpq库与PostgreSQL数据库连接并执行查询的C程序示例,代码同样附有详细注释。

#include <stdio.h>        // 标准输入输出库
#include <stdlib.h>       // 标准库,提供内存分配、进程控制等函数
#include <libpq-fe.h>     // 包含PostgreSQL的libpq头文件

int main() {
    // 使用libpq的函数PQconnectdb来连接数据库
    PGconn *conn = PQconnectdb("user=your_username dbname=your_database password=your_password");

    // 检查数据库连接是否成功
    if (PQstatus(conn) == CONNECTION_BAD) {
        // 如果连接失败,打印错误信息并退出
        fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn));
        PQfinish(conn); // 关闭连接
        exit(1);
    }

    // 执行SQL查询语句
    PGresult *res = PQexec(conn, "SELECT * FROM your_table");

    // 检查查询结果状态
    if (PQresultStatus(res) != PGRES_TUPLES_OK) {
        // 如果查询失败,打印错误信息并退出
        fprintf(stderr, "SELECT failed: %s\n", PQerrorMessage(conn));
        PQclear(res); // 释放结果集
        PQfinish(conn); // 关闭连接
        exit(1);
    }

    // 获取查询结果的字段数
    int nFields = PQnfields(res);

    // 遍历查询结果中的每一行数据
    for (int i = 0; i < PQntuples(res); i++) {
        for (int j = 0; j < nFields; j++)
            printf("%s\t", PQgetvalue(res, i, j));  // 输出每一列的值
        printf("\n");
    }

    // 释放查询结果
    PQclear(res);

    // 关闭数据库连接
    PQfinish(conn);

    return 0;
}
编译代码

编译该程序时需要链接PostgreSQL的客户端库:

gcc -o postgres_example postgres_example.c -lpq

3. SQLite

SQLite是一个轻量级的嵌入式数据库系统,它的数据库文件可以直接嵌入到应用程序中,常用于不需要独立服务器的数据库应用场景。SQLite的C API非常简单易用。

安装开发库

首先安装SQLite的开发库:

sudo apt-get install libsqlite3-dev  # 对于Ubuntu/Debian系统
sudo yum install sqlite-devel        # 对于CentOS/RHEL系统
示例代码

以下是一个通过SQLite的C API操作数据库的简单示例。

#include <stdio.h>        // 标准输入输出库
#include <sqlite3.h>      // 包含SQLite头文件

int main() {
    sqlite3 *db;          // SQLite数据库连接句柄
    char *err_msg = 0;    // 用于存储错误信息

    // 打开SQLite数据库,如果数据库不存在则创建该数据库文件
    int rc = sqlite3_open("test.db", &db);

    // 检查数据库是否成功打开
    if (rc != SQLITE_OK) {
        // 如果打开失败,打印错误信息并退出
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db); // 关闭数据库
        return 1;
    }

    // SQL查询语句
    const char *sql = "SELECT * FROM your_table";

    // 执行SQL查询
    sqlite3_exec(db, sql, 0, 0, &err_msg);

    // 如果查询执行过程中出现错误,打印错误信息
    if (err_msg != NULL) {
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg); // 释放错误信息
    }

    // 关闭数据库连接
    sqlite3_close(db);

    return 0;
}
编译代码

编译该程序时需要链接SQLite库:

gcc -o sqlite_example sqlite_example.c -lsqlite3

4. ODBC (通用数据库连接)

ODBC(开放式数据库连接)是一种标准的数据库访问接口,它支持多种数据库,如SQL Server、Oracle、MySQL等。通过ODBC接口可以进行跨数据库的通用访问。

安装ODBC开发包
sudo apt-get install unixodbc-dev  # 对于Ubuntu/Debian系统
sudo yum install unixODBC-devel    # 对于CentOS/RHEL系统
示例代码

以下是一个通过ODBC连接数据库并执行SQL查询的C程序示例。

#include <stdio.h>        // 标准输入输出库
#include <stdlib.h>       // 标准库
#include <sql.h>          // ODBC核心头文件
#include <sqlext.h>       // ODBC扩展头文件

int main() {
    SQLHENV env;          // ODBC环境句柄
    SQLHDBC dbc;          // ODBC数据库连接句柄
    SQLHSTMT stmt;        // ODBC语句句柄
    SQLRETURN ret;        // 用于存储ODBC API的返回值

    // 分配ODBC环境句柄
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);

    // 设置ODBC的版本为3.0
    SQLSetEnvAttr(env, SQL_ATTR

_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);

    // 分配ODBC数据库连接句柄
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

    // 连接到指定的数据库,参数为DSN、用户名和密码
    SQLConnect(dbc, (SQLCHAR *)"DSN_NAME", SQL_NTS,
               (SQLCHAR *)"username", SQL_NTS,
               (SQLCHAR *)"password", SQL_NTS);

    // 分配ODBC语句句柄
    SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

    // 执行SQL查询
    SQLExecDirect(stmt, (SQLCHAR *)"SELECT * FROM your_table", SQL_NTS);

    // 用于存储查询结果的列值
    SQLCHAR col1[256], col2[256];

    // 逐行获取查询结果并输出
    while (SQLFetch(stmt) == SQL_SUCCESS) {
        SQLGetData(stmt, 1, SQL_C_CHAR, col1, sizeof(col1), NULL); // 获取第一列数据
        SQLGetData(stmt, 2, SQL_C_CHAR, col2, sizeof(col2), NULL); // 获取第二列数据
        printf("%s, %s\n", col1, col2);  // 打印结果
    }

    // 释放语句句柄
    SQLFreeHandle(SQL_HANDLE_STMT, stmt);

    // 断开数据库连接
    SQLDisconnect(dbc);

    // 释放数据库连接句柄
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);

    // 释放环境句柄
    SQLFreeHandle(SQL_HANDLE_ENV, env);

    return 0;
}
编译代码

编译时需要链接ODBC库:

gcc -o odbc_example odbc_example.c -lodbc

总结

  • MySQL/MariaDB:使用libmysqlclient库,通过C API与MySQL数据库交互。
  • PostgreSQL:使用libpq库,提供与PostgreSQL数据库的交互接口。
  • SQLite:轻量级的嵌入式数据库,使用libsqlite3库操作SQLite数据库。
  • ODBC:通过unixODBC库实现通用数据库访问,支持多种数据库系统。

通过为不同的数据库选择相应的驱动库,使用C/C++编程语言可以高效地实现数据库连接与操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值