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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921586.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构&#xff1a; 这几个表总数为100多万&#xff0c;经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图&#xff1a; 界面&#xff1a; SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II&#xff1a;贪心&#xff08;跃迁合并&#xff09;-9行py&#xff08;O(n)&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的&#xff0c;最近优化下无线网络&#xff0c;说新的设备用华为的&#xff0c;然后我是直到要部署的当天才知道用华为设备的&#xff0c;就很无语了&#xff0c;一点准备没有&#xff0c;以下为这次的实际操作记录吧&…

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell&#xff08;以管理员身份&#xff09;命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…

C语言基础学习:抽象数据类型(ADT)

基础概念 抽象数据类型&#xff08;ADT&#xff09;是一种数据类型&#xff0c;它定义了一组数据以及可以在这组数据上执行的操作&#xff0c;但隐藏了数据的具体存储方式和实现细节。在C语言中&#xff0c;抽象数据类型&#xff08;ADT&#xff09;是一种非常重要的概念&…

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…

【山大909算法题】2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse&#xff0c;该函数对链表进行逆序操作&#xff08;将链表中的结点按与原序相反的顺序连接&#xff09;&#xff0c;要求逆序操作就地进行&#xff0c;不分配…

[Redis#2] 定义 | 使用场景 | 安装教程 | 快!

目录 1. 定义 In-memory data structures 在内存中存储数据 2. 优点&#xff01;快 Programmability 可编程性 Extensibility 扩展性 Persistence 持久化 Clustering 分布式集群 High availability 高可用性 ⭕快速访问的实现 3. 使用场景 1.Real-time data store …

学习编程,学习中间件,学习源码的思路

01 看的多&#xff0c;内化不足 最近想复习一下编程相关的知识&#xff0c;在复习前我翻开了之前的一些笔记&#xff0c;这些笔记基本都是从书本、视频、博客等摘取记录的&#xff0c;看着这些笔记心里总结&#xff1a;看的多&#xff0c;内化不足。 02 整理大纲 为了解决这个…

hhdb数据库介绍(10-2)

集群管理 计算节点集群 集群管理主要为用户提供对计算节点集群的部署、添加、启停监控、删除等管理操作。 集群管理记录 集群管理页面显示已部署或已添加的计算节点集群信息。可以通过左上角搜索框模糊搜索计算节点集群名称进行快速查找。同时也可以通过右侧展开展开/隐藏更…

AG32既可以做MCU,也可以仅当CPLD使用

Question: AHB总线上的所有外设都需要像ADC一样&#xff0c;通过cpld处理之后才能使用? Reply: 不用。 除了ADC外&#xff0c;其他都是 mcu可以直接配置使用的。 Question: DMA和CMP也不用? Reply: DMA不用。 ADC/DAC/CMP 用。 CMP 其实配置好后&#xff0c;可以直…

贪心算法(1)

目录 柠檬水找零 题解&#xff1a; 代码&#xff1a; 将数组和减半的最少操作次数&#xff08;大根堆&#xff09; 题解&#xff1a; 代码&#xff1a; 最大数&#xff08;注意 sort 中 cmp 的写法&#xff09; 题解&#xff1a; 代码&#xff1a; 摆动序列&#xff0…

网络爬虫——综合实战项目:多平台房源信息采集与分析系统

1. 项目背景与目标 1.1 项目背景 随着房产市场的快速发展&#xff0c;各大平台上充斥着大量房源信息。为了帮助用户快速掌握市场动态&#xff0c;需要通过爬虫技术自动采集多平台数据&#xff0c;清洗后进行存储和分析&#xff0c;为用户提供有价值的洞察。开发者通过这一实战…

数据结构-7.Java. 对象的比较

本篇博客给大家带来的是java对象的比较的知识点, 其中包括 用户自定义类型比较, PriorityQueue的比较方式, 三种比较方法...... 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备如何使用Docker运行?

在当今的安防监控领域&#xff0c;随着视频监控技术的不断发展和应用范围的扩大&#xff0c;如何高效、稳定地管理并分发视频流资源成为了行业内外关注的焦点。EasyNVR作为一款功能强大的多品牌NVR管理工具/设备&#xff0c;凭借其灵活的部署方式和卓越的性能&#xff0c;正在引…

LSTM原理解读与实战

在RNN详解及其实战中&#xff0c;简单讨论了为什么需要RNN这类模型、RNN的具体思路、RNN的简单实现等问题。同时&#xff0c;在文章结尾部分我们提到了RNN存在的梯度消失问题&#xff0c;及之后的一个解决方案&#xff1a;LSTM。因此&#xff0c;本篇文章主要结构如下&#xff…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单&#xff0c;前端发送账号密码的表单&#xff0c;后端接收验证后即可~ 淦&#xff01;可是我想多了&#xff0c;于是有了以下几个问题&#xff08;里面还包含网络安全问题&#xff09;&#xff1a; 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

使用Element UI实现前端分页,前端搜索,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、前端搜索1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 三、跨页选择1、模板部分 (\<template>)2、…