c++中操作数据库的常用函数

在C++中操作数据库,尤其是MySQL数据库,主要通过MySQL提供的C API或MySQL Connector/C++库来实现。这些库提供了一系列的函数,使得开发者能够在C++应用程序中执行数据库的连接、查询、更新、删除等操作。以下是C++中操作MySQL数据库的一些常用函数,以及它们的功能和使用方法。

连接数据库

1. mysql_init

初始化一个MySQL连接句柄,为后续的数据库操作做准备。

复制代码

cpp

深色版本

复制代码
MYSQL *mysql_init(MYSQL *mysql);

如果传入 NULL,函数会自动分配一个 MYSQL 对象。如果初始化失败,返回 NULL

1

2. mysql_real_connect

尝试建立到MySQL服务器的连接。

复制代码

cpp

深色版本

复制代码
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
  • mysql: 由 mysql_init 初始化的句柄。
  • host: 连接的MySQL服务器的地址。
  • user: 连接的服务器的用户名。
  • passwd: 连接的服务器的密码。
  • db: 默认选择的数据库名称。
  • port: 连接的服务器的端口,默认为3306。
  • unix_socket: 通信管道或socket,通常设为 NULL
  • client_flag: 客户端标志位,通常设为 0

如果连接成功,返回句柄;失败返回 NULL

1

设置字符集

3. mysql_set_character_set

设置当前客户端的字符集,以确保字符编码的一致性。

复制代码

cpp

深色版本

复制代码
int mysql_set_character_set(MYSQL *mysql, const char *csname);
  • mysql: 初始化完成的句柄。
  • csname: 字符集名称,如 "utf8"

成功返回 0,失败返回非零值。

1

执行SQL语句

4. mysql_query

执行一个SQL语句。

复制代码

cpp

深色版本

复制代码
int mysql_query(MYSQL *mysql, const char *stmt_str);
  • mysql: 初始化完成的句柄。
  • stmt_str: 要执行的SQL语句。

成功返回 0,失败返回非零值。

1

5. mysql_real_query

类似于 mysql_query,但允许执行包含二进制数据的语句。

复制代码

cpp

深色版本

复制代码
int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length);
  • length: SQL语句的长度。

成功返回 0,失败返回非零值。

9

处理查询结果

6. mysql_store_result

保存查询结果到本地。

复制代码

cpp

深色版本

复制代码
MYSQL_RES *mysql_store_result(MYSQL *mysql);
  • mysql: 初始化完成的句柄。

成功返回结果集的指针,失败返回 NULL

1

7. mysql_fetch_row

遍历结果集,获取单行数据。

复制代码

cpp

深色版本

复制代码
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
  • result: 保存到本地的结果集地址。

返回值是一个 char ** 类型的指针,将每条数据做成了字符串指针数组,row[0] 为第一列,row[1] 为第二列,依此类推。

1

8. mysql_num_rows

获取结果集中的行数。

复制代码

cpp

深色版本

复制代码
uint64_t mysql_num_rows(MYSQL_RES *result);
  • result: 保存到本地的结果集地址。

返回结果集中数据的条数。

1

9. mysql_num_fields

获取结果集中列的个数。

复制代码

cpp

深色版本

复制代码
unsigned int mysql_num_fields(MYSQL_RES *result);
  • result: 保存到本地的结果集地址。

返回结果集中每条数据的列数。

1

清理资源

10. mysql_free_result

释放结果集资源。

复制代码

cpp

深色版本

复制代码
void mysql_free_result(MYSQL_RES *result);
  • result: 保存到本地的结果集地址。

没有返回值。

1

11. mysql_close

关闭数据库客户端连接,销毁句柄。

复制代码

cpp

深色版本

复制代码
void mysql_close(MYSQL *mysql);
  • mysql: 初始化完成的句柄。

没有返回值。

1

错误处理

12. mysql_error

获取MySQL接口执行错误的原因。

复制代码

cpp

深色版本

复制代码
const char *mysql_error(MYSQL *mysql);
  • mysql: 初始化完成的句柄。

返回错误信息的字符串。

1

示例代码

以下是一个简单的示例,展示了如何使用上述函数连接MySQL数据库、执行查询并处理结果集。

复制代码

cpp

深色版本

复制代码
#include <iostream>
#include <mysql.h>

int main() {
    MYSQL *conn = mysql_init(NULL);

    // 连接数据库
    if (!mysql_real_connect(conn, "localhost", "root", "password", "testdb", 0, NULL, 0)) {
        std::cerr << "Error connecting to database: " << mysql_error(conn) << std::endl;
        return 1;
    }

    // 设置字符集
    if (mysql_set_character_set(conn, "utf8") != 0) {
        std::cerr << "Error setting character set: " << mysql_error(conn) << std::endl;
        return 1;
    }

    // 执行查询
    if (mysql_query(conn, "SELECT * FROM users")) {
        std::cerr << "Error executing query: " << mysql_error(conn) << std::endl;
        return 1;
    }

    // 保存查询结果
    MYSQL_RES *result = mysql_store_result(conn);
    if (result == NULL) {
        std::cerr << "Error storing result: " << mysql_error(conn) << std::endl;
        return 1;
    }

    // 获取结果集中的行数和列数
    unsigned int num_fields = mysql_num_fields(result);
    unsigned int num_rows = mysql_num_rows(result);

    std::cout << "Number of rows: " << num_rows << std::endl;
    std::cout << "Number of fields: " << num_fields << std::endl;

    // 遍历结果集
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result))) {
        for (unsigned int i = 0; i < num_fields; i++) {
            std::cout << row[i] << "\t";
        }
        std::cout << std::endl;
    }

    // 释放结果集资源
    mysql_free_result(result);

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

    return 0;
}

总结

通过上述函数,C++开发者可以方便地在应用程序中实现与MySQL数据库的交互。这些函数涵盖了从连接数据库到执行查询、处理结果集再到清理资源的完整流程,为开发者提供了强大的工具来管理和操作数据库数据。

1

相关推荐
nbwenren5 小时前
MySQL数据库误删恢复_mysql 数据 误删
数据库·mysql·adb
HUGu RGIN14 小时前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
北冥有鱼被烹1 天前
【微知】rokid glass如何开启无线adb进行APP安装
adb
STER labo2 天前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
sjmaysee2 天前
CentOS7安装Mysql5.7(ARM64架构)
adb·架构
AtOR CUES3 天前
MySQL——表操作及查询
android·mysql·adb
mOok ONSC3 天前
mysql9.0windows安装
windows·adb
xxjj998a3 天前
Laravel8.x核心特性详解
数据库·mysql·adb
TeDi TIVE3 天前
Linux下MySQL的简单使用
linux·mysql·adb
TeDi TIVE3 天前
MySQL四种备份表的方式
mysql·adb·oracle