MySQL 数据库 C/C++ 常用函数

news2024/11/20 20:26:08

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、MySQL C/C++ 常用接口

1.1 mysql_init

1.2 mysql_real_connect

1.3 mysql_close

1.4 mysql_set_character_set

1.5 mysql_query

1.6 mysql_store_result

1.7 mysql_fetch_row

1.8 mysql_real_query

二、测试用例


本篇文章对 MySQL C/C++ 常用接口进行讲解,包括:连接数据库、插入、更新、查询等操作。

一、MySQL C/C++ 常用接口

1.1 mysql_init

MYSQL *mysql_init(MYSQL *mysql)

分配或初始化一个适用于 mysql_real_connect() 的 MYSQL 对象,用于连接 MySQL 服务端。如果传入 NULL,会自动分配一个 MySQL 对象。

1.2 mysql_real_connect

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 连接处理程序结构的 API 函数之前,客户端程序必须成功连接到服务器。

1.3 mysql_close

void mysql_close(MYSQL *mysql)

 关闭先前打开的连接。 如果处理程序是由 mysql_init() 或 mysql_connect() 自动分配的,则 mysql_close() 还会释放 mysql 指向的连接处理程序。不要在处理程序关闭后使用它。

1.4 mysql_set_character_set

int mysql_set_character_set(MYSQL *mysql, const char *csname)

该函数用于设置当前连接的默认字符集。字符串 csname 指定一个有效的字符集名称。

1.5 mysql_query

int mysql_query(MYSQL *mysql, const char *stmt_str)

 执行以 null 结尾的字符串 stmt_str 指向的 SQL 语句。返回 0 表示成功,否则执行出错。

1.6 mysql_store_result

MYSQL_RES *mysql_store_result(MYSQL *mysql)

 在调用 mysql_real_query() 或 mysql_query() 之后,必须为每个成功生成结果集的语句(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE 等)调用 mysql_store_result() 或 mysql_use_result()。在完成结果集后,您还必须调用 mysql_free_result()。

1.7 mysql_fetch_row

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

检索结果集的下一行。当在 mysql_store_result() 或 mysql_store_result_nonblocking() 之后使用时,如果没有更多的行要检索,mysql_fetch_row() 将返回 NULL。当在 mysql_use_result() 之后使用时,如果没有更多的行可检索或发生错误,mysql_fetch_row() 将返回 NULL。

1.8 mysql_real_query

int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)

执行stmt_str指向的 SQL 语句。 通常,字符串必须由单个 SQL 语句组成,不带终止分号 (;) 或 \g。 如果启用了多语句执行,则该字符串可以包含多个以分号分隔的语句。

mysql_query() 不能用于包含二进制数据的语句;你必须改用 mysql_real_query() 。(二进制数据可能包含 \0 字符,mysql_query() 将其解释为语句字符串的结尾。)此外,mysql_real_query() 比 mysql_query() 更快,因为它不在语句字符串上调用 strlen()。 

二、测试用例

下面就来演示下上面的函数的使用,如下所示。

#include <iostream>
#include <mysql.h>
#include <sstream>
using namespace std;

#define HOST "127.0.0.1"
#define USER "root"
#define PASSWORD "qwer1234"
#define DATABASE "mysqltest"
#define PORT 3306

int main()
{
    // 初始化 MYSQL 对象
    MYSQL *conn = mysql_init(nullptr);
    //连接 MySQL 数据库
    if (!mysql_real_connect(conn, HOST, USER, PASSWORD, DATABASE, PORT, NULL, 0)) {
		cout<<"Error connecting to database: "<<mysql_error(conn)<<endl;
		exit(1);
	}

    // 设置字符集
	if (mysql_set_character_set(conn, "gbk") != 0) {
        cout<<__LINE__<<" : error : "<<mysql_error(conn)<<endl;
        exit(1);
    }

    const char * query = "insert into student(name, height) values('test13', '193');";

    int ret = mysql_query(conn, query);
    if (!ret) {
        cout<<"插入数据成功!"<<endl;
    } else {
        cout<<"Error: "<<mysql_error(conn)<<endl;
        cout<<"插入数据失败!"<<endl;
    }

    query = "select * from student;";
    ret = mysql_query(conn, query);
    MYSQL_RES *retSet = mysql_store_result(conn);
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(retSet)) != nullptr) {
        cout<<"id = "<<row[0]<<"  name = "<<row[1]<<"  height = "<<row[2]<<endl;
    }

    // 关闭连接
    mysql_close(conn);
    return 0;
}

输出结果为:

插入数据成功!
id = 1  name = test1  height = 181
id = 2  name = test2  height = 182
id = 3  name = test3  height = 183
id = 4  name = test4  height = 184
id = 5  name = test5  height = 185
id = 6  name = test6  height = 186
id = 7  name = test7  height = 187
id = 8  name = test8  height = 188
id = 9  name = test9  height = 189
id = 10  name = test10  height = 180
id = 11  name = test11  height = 191
id = 12  name = test12  height = 192
id = 13  name = test13  height = 193

🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


参考链接:

[1] MySQL :: MySQL 8.0 C API Developer Guide :: 4 C API Function Reference

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型&#xff0c;全称为"聊天式自动回复生成技术"&#xff08;Chat-based Automatic Reply Generation Technology&#xff09;&#xff0c;用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的&#xff0c;具…

XCIE-HUAWEI-超级完整的BGP-1

XCIE-HUAWEI-超级完整的BGP-1 声明&#xff0c;内容对比前面的可能差一点&#xff0c;因为这个BGP我是会的&#xff0c;但是华为的特性啥的不太会 所以相对来说可能没那么详细&#xff0c;不过应该也够的了&#xff0c;要看思科的翻我的文章去有思科的 先说一个东西 面试会问…

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例 STEP7-Micro/WIN SMART 从V2.4 版本开始,软件中直接集成 Modbus TCP 库指令,安装软件后,Modbus TCP 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。 如下图Modbus TCP库指令…

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

最近我们被客户要求撰写关于曲线回归的研究报告&#xff0c;包括一些图形和统计输出。本文将使用三种方法使模型适合曲线数据&#xff1a;1&#xff09;多项式回归&#xff1b;2&#xff09;用多项式样条进行B样条回归&#xff1b;3&#xff09; 进行非线性回归。在此示例中&am…

微信小程序 | 一比一复刻世界杯点球大战

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

Codeforces Round #837 (Div. 2) Hossam and Friends

原题链接&#xff1a;https://codeforces.com/contest/1771/problem/B 题意 &#xff1a;你总共有n个朋友编号1~n&#xff0c;其中m对互不认识&#xff0c;求1~n区间中没有互不认识的子段的总个数。 思路&#xff1a;总字段个数为每个编号前面的编号个数&#xff08;包括自己…

RK3568平台开发系列讲解(安卓适配篇)Android11 预安装应用功能

&#x1f680;返回专栏总目录 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;Android11 上的应用预安装功能&#xff0c;主要是指配置产品时&#xff0c;需要将提前准备好的第三方应用 apk 放进 android 系统。在实际的研发过程…

【NumPy 数组连接、拆分、搜索、排序】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

[附源码]Python计算机毕业设计宠物领养系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

数学基础从高一开始5、充分必要条件

数学基础从高一开始5、充分必要条件 目录 数学基础从高一开始5、充分必要条件 概念复习 命题 真命题与假命题 命题的形式 概念定义 例1&#xff1a; 例2 练习 总结 概念复习 命题 命题:把用语言、符号或式子表达的&#xff0c;可以判断真假的陈述句称为命题。 真命题…

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

1.说一说三大范式 「第一范式」&#xff1a;数据库中的字段具有「原子性」&#xff0c;不可再分&#xff0c;并且是单一职责 「第二范式」&#xff1a;「建立在第一范式的基础上」&#xff0c;第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需…

Rasa 基于规则的对话管理: 天气预报机器人

文章目录1. fallbackNLU fallback2. 意图触发动作3. 表单定义表单激活表单执行表单任务4. 天气预报机器人nlu.ymlstories.ymlrules.ymlcities.ymldomain.ymlconfig.ymlendpoints.ymlcredentials.ymlactions.py测试learn from https://github.com/Chinese-NLP-book/rasa_chinese…

Keras深度学习实战(40)——音频生成

Keras深度学习实战&#xff08;40&#xff09;——音频生成0. 前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 音频生成模型2.1 数据集加载与预处理2.2 模型构建与训练小结系列链接0. 前言 我们已经在《文本生成模型》一节中学习了如何利用深度神经网络生成文本&#x…

智能、人机融合智能和深度态势感知

内容摘要&#xff1a;人工智能的符号主义、联结主义和行为主义三大学派&#xff0c;分别从不同角度切入智能的本质&#xff0c;其研究观点相互补充但各有局限。在人机融合过程中&#xff0c;怎样进行人机功能分配&#xff0c;人机怎样融合学习、理解、决策、推理乃至感知。数据…

获取微信公众号token

access_token是公众号的全局唯一接口调用凭据&#xff0c;公众号调用各接口时都需使用access_token 接口调用请求说明 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET参数说明 参数是否必填说…

牛!单表千万行数据库: LIKE 搜索优化手记

我们可以在 txt 列上建立索引&#xff0c;用于优化该查询&#xff1a; CREATE INDEX tbl_like_txt_idx ON [tbl_like] ( [txt] ) 应用索引后&#xff0c;查询速度大大加快&#xff0c;仅需 5 毫秒&#xff1a; 由此可知&#xff1a;对于左前缀匹配&#xff0c;我们可以通过增…

市政工控典型安全解决方案

汽车制造业 MES系统 DNC系统 生产 安全域1 管理层 工控安全隔离装置 交换机 安全配置核查系统 HMI 历史数据库 运行监控系统 实时数据库 打印机过程 安全域2 监控层 工控漏洞扫描系统 安全交换机 工控安全审计系统 工控入侵检测系统工程师站 A 操作员站 A 实时数据库A 操作员站…

Linux中的文件传输命令(scp、rsync)、Linux之间通过sshkey公钥免密登录

scp测试环境&#xff1a;centos7.7 最小化安装&#xff0c;默认是有scp命令 -r 递归复制整个目录 -p 保留源文件的修改时间、访问时间和权限 -v 详细方式显示输出 -P&#xff08;大写&#xff09;指定port&#xff08;端口&#xff09;输出scp命令使用格式 scp /filename 目…

Linux 程序开发 之 库打桩机制

目录前言一、库打桩定义二、编译时打桩三、链接时打桩四、运行时打桩五、处理目标文件的工具前言 Linux 链接器支持一个很强大的技术&#xff0c;称为库打桩(library interpositioning)&#xff0c;它允许你截获对共享库函数的调用&#xff0c;取而代之执行自己的代码。使用打桩…