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

相关推荐
misty youth1 天前
Navicat与PHPstudy小皮
mysql·adb·php·navicat
for_ever_love__2 天前
MySQL 8.0 数据类型选型指南:INT、DECIMAL、VARCHAR 与时间字段怎么选
mysql·adb·数据类型·varchar·长度·字段类型选择
yeflx3 天前
Ubuntu22.04安装Mysql Workbench
数据库·mysql·adb
夜雪一千3 天前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
Dxy12393102164 天前
MySQL JSON 生成列索引原理、实战与坑点
mysql·adb·json
远方 hi4 天前
MySQL 管理
adb
夜雪一千5 天前
MySQL 删除 JSON 类型的数据实战
mysql·adb·json
千码君20166 天前
个人开发者:安卓手机adb调试
android·adb·智能手机
夜雪一千7 天前
MySQL 如何存储经纬度坐标:选型、建表、空间查询实战
android·mysql·adb