【MySQL数据库】C/C++连接数据库

        MySQL要想在C/C++下使用,就必须要有 MySQL 提供的头文件和相关的库。

        在Ubuntu系统上,使用 apt install mysql-server 安装MySQL服务器后,仅安装了MySQL数据库服务本身,并没有安装MySQL开发所需的库和头文件。因此,在尝试用C/C++编写访问MySQL数据库的应用程序时,编译器找不到相应的MySQL头文件(如)和相关的库,导致无法正常编译。

        使用C/C++访问数据库时,需要安装MySQL提供的开发包,这些包包含了进行MySQL开发所需的头文件和库文件。Ubuntu系统下安装的MySQL服务,可以使用以下指令安装MySQL开发库。

sudo apt install default-libmysqlclient-dev

        注意:MySQL开发库的版本要与MySQL服务器一致,否则某些情况下会出现不兼容问题。  

        在Ubuntu系统下安装好MySQL后,头文件在 /usr/include/mysql 路径下(/usr/include是系统搜索头文件的默认路径),库文件在 /usr/lib/x86_64-linux-gnu/ 路径下(系统链接库时默认的查找路径)。

        下面通过 mysql_get_client_info() 函数,来验证我们的引入是否成功。

#include <cstdio>

#include <mysql/mysql.h>

int main()

{

    printf("mysql client Version: %s\n", mysql_get_client_info());

    return 0;

}

// 下面指令生成失败,因为没有链接MySQL库

zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test  

// 链接MySQL库,成功生成

zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test -lmysqlclient  

        C/C++对应MySQL的接口和使用流程请观看此文章:MySQL操作函数接口。

MySQL通用接口:

        初始化一个MYSQL连接的实例对象。

        MYSQL * mysql_init(MYSQL *mysql);    

        连接MySQL服务器。

        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 服务器发送 SQL 语句并执行它。

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

获取MySQL结果:

        mysql_store_result是从 MySQL 服务器获取查询结果集的一个函数。当执行了一个select 查询或其他会产生结果集的查询(如show)后,可以使用该函数来将整个结果集一次性加载到客户端内存中。

      MYSQL_RES *mysql_store_result(MYSQL *mysql);

      mysql_store_result 获取结果集后,下面就是读取获取结果集中的数据。

      获取结果行数:my_ulonglong mysql_num_rows(MYSQL_RES *res);

      获取结果列数:unsigned int mysql_num_fields(MYSQL_RES *res);

      获取结果集中每个列的属性信息

              MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

      获取结果集中的数据:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

     

      说明:my_ulonglong其实就是int64_t;

                 MYSQL_FIELD是一个结构体,mysql_fetch_fields实际返回的就是结构体数            组,数组的每个元素对应一个列的属性信息;

                MYSQL_ROW其实就是char**,可以当成一个二维数组来用,每一列对应数组中        的一个元素

注意:

        1,建立好链接之后,获取英文没有问题,如果获取中文是乱码,那么说明设置链接的字符集与数据库不匹配。这里需要运用 mysql_set_character_set 修改字符集。

        mysql_set_character_set(myfd, "utf8");    myfd使用utf8字符集,原始默认是latin1

        2,mysql_store_result函数存储结果集时,内部malloc了一片内存空间来存储查询过来的数据,执行完毕后,需要 void mysql_free_result(MYSQL_RES *result) 函数来释放资源。

        代码实例请在此链接下观看:C++代码运用MySQL


        下面来说明下 show processlist 命令。

        show processlist 是 MySQL 中用于显示当前所有连接到 MySQL 服务器的连接(即线程)以及其状态的命令。每个连接在 MySQL 中都表示为一个线程。该指令提供了查看这些线程详细信息的方法。输出字段说明如下:

  • Id:每个线程的唯一标识符。
  • User:发起该线程的用户名。
  • Host:发起该线程的客户端主机名或IP地址(以及端口号)。如果通过TCP/IP连接,格式通常是:[hostname]:[port];如果是本地连接,则可能是localhost
  • db:当前线程正在使用的数据库名称。如果没有选择任何数据库,则此列为NULL。
  • Command:线程正在执行的操作类型。例如,sleep表示线程处于空闲等待状态;query表示线程正在执行查询。
  • Time:线程处于其当前状态的时间,以秒为单位。
  • State:线程的状态,提供了关于线程当前活动的更详细的信息。不同的命令可能有不同的状态。
  • Info:正在执行的SQL语句文本。如果线程没有执行任何语句,则此列为NULL。

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

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

相关文章

Kubernetes调度策略深度解析:NodeSelector与NodeAffinity的正确打开方式

在Kubernetes集群管理中&#xff0c;如何精准控制Pod的落点&#xff1f;本文将深入解析两大核心调度策略的差异&#xff0c;并通过生产案例教你做出正确选择。 一、基础概念快速理解 1.1 NodeSelector&#xff08;节点选择器&#xff09; 核心机制&#xff1a;通过标签硬匹配…

Golang的linux运行环境的安装与配置

很多新手在学go时&#xff0c;linux下的配置环境一头雾水&#xff0c;总结下&#xff0c;可供参考&#xff01; --------------------------------------Golang的运行环境的安装与配置-------------------------------------- 将压缩包放在/home/tools/下 解压 tar -zxvf g…

自定义实现elementui的锚点

背景 前不久有个需求&#xff0c;上半部分是el-step步骤条&#xff0c;下半部分是一些文字说明&#xff0c;需要实现点击步骤条中某个步骤自定义定位到对应部分的文字说明&#xff0c;同时滚动内容区域的时候还要自动选中对应区域的步骤。element-ui-plus的有锚点这个组件&…

Oracle Fusion常用表

模块表名表描述字段说明sodoo_headers_all销售订单头表sodoo_lines_all销售订单行表sodoo_fulfill_lines_all销售订单明细行表popo_headers_all采购订单头表popo_lines_all采购订单行表popo_line_locations_all采购订单分配表popo_distributions_all采购订单发运表invEGP_SYSTE…

面试常问系列(一)-神经网络参数初始化-之-softmax

背景 本文内容还是对之前关于面试题transformer的一个延伸&#xff0c;详细讲解一下softmax 面试常问系列(二)-神经网络参数初始化之自注意力机制-CSDN博客 Softmax函数的梯度特性与输入值的幅度密切相关&#xff0c;这是Transformer中自注意力机制需要缩放点积结果的关键原…

5.9-selcct_poll_epoll 和 reactor 的模拟实现

5.9-select_poll_epoll 本文演示 select 等 io 多路复用函数的应用方法&#xff0c;函数具体介绍可以参考我过去写的博客。 先绑定监听的文件描述符 int sockfd socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serveraddr; memset(&serveraddr, 0, sizeof(struc…

Python基础语法(上)

常量和表达式 我们可以使用python来进行一些 - * / %的一些运算 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) python中的运算规则与数学当中一致&#xff0c;先乘除后加减&#xff0c;有括号的先计算括号里面的。 形如 1 2 - 3 这样是算式, 在编程语言中称为 表达式,…

数图闪耀2025深圳CCFA中国零售博览会:AI+零售数字化解决方案引发现场热潮

展会时间&#xff1a;2025年5月8日—10日 地点&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#xff09; 【深圳讯】5月8日&#xff0c;亚洲规模最大的零售行业盛会——2025 CCFA中国零售博览会在深圳盛大开幕。本届展会汇聚全球25个国家和地区的900余家参展商&#xff…

方法:批量识别图片区域文字并重命名,批量识别指定区域内容改名,基于QT和阿里云的实现方案,详细方法

基于QT和阿里云的图片区域文字识别与批量重命名方案 项目场景 ​​企业档案管理​​:批量处理扫描合同、发票等文档,根据编号或关键信息自动重命名文件​​医疗影像管理​​:识别X光、CT等医学影像中的患者信息,按姓名+检查日期重命名​​电商订单处理​​:从订单截图中提…

Mybatis解决以某个字段存在,批量更新,不存在批量插入(高效)(一)

背景 在开发企业级应用时&#xff0c;我们经常需要处理批量数据的插入和更新操作。传统的逐条处理方式性能低下&#xff0c;而简单的REPLACE INTO或INSERT ... ON DUPLICATE KEY UPDATE在某些场景下又不够灵活。本文将介绍一种基于临时表的高效批量插入/更新方案&#xff0c;解…

JVM、JRE、JDK的区别

JVM JVM全称Java虚拟机(Java Virtual Machine, JVM),它是运行java字节码的虚拟机&#xff0c;JVM针对不同的系统有不同的实现&#xff0c;目的运行相同的字节码有同样的结果&#xff0c;JVM是“一次编译&#xff0c;到处运行”实现的关键。如下不同的编程语言编译生成字节码文…

神经元和神经网络定义

在深度学习中&#xff0c;神经元和神经网络是构成神经网络模型的基本元素。让我们从基础开始&#xff0c;逐步解释它们的含义和作用。 1️⃣ 神经元是什么&#xff1f; 神经元是神经网络中的基本计算单元&#xff0c;灵感来自于生物神经系统中的神经元。每个人的脑中有数以亿…

CDGP重点知识梳理

写在前面 全文11700字,共82个重点知识 目 录 考点分布 考试要求 第一章 数据管理-5%

Ubuntu 22.04 安装配置远程桌面环境指南

在云服务器或远程主机上安装图形化桌面环境,可以极大地提升管理效率和用户体验。本文将详细介绍如何在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装和配置 Xfce4 桌面环境,并通过 VNC 实现远程访问。 系统环境 操作系统:Ubuntu 22.04 LTS (Jammy Jellyfish)架构:AMD64安装…

node提示node:events:495 throw er解决方法

前言 之前开发的时候喜欢使用高版本&#xff0c;追求新的东西&#xff0c;然后回头运行一下之前的项目提示如下 项目技术栈&#xff1a;node egg 报错 node:events:495 throw er; // Unhandled error event ^ Error: ENOENT: no such file or directory, scandir F:\my\gi…

【软件设计师:软件工程】9.软件开发模型与方法

一、软件危机与软件工程 软件危机与软件工程是计算机科学发展中密切相关的两个概念。 1.软件危机(Software Crisis) 背景:20世纪60年代至80年代,随着计算机硬件性能提升,软件规模与复杂度剧增,传统开发方法难以应对,导致大量项目失败。 表现: 成本失控:开发周期长、…

范式之殇-关系代数与参照完整性在 Web 后台的落寞

最近参加了一个PostgreSQL相关的茶会&#xff0c;感慨良多。原本话题是PostgreSQL 在 SELECT 场景中凭借其成熟的查询优化器、丰富的功能特性和灵活的执行策略&#xff0c;展现出显著优势。在窗口函数&#xff08;Window Functions&#xff09;、JOIN 优化、公共表表达式&#…

WebRTC工作原理详细介绍、WebRTC信令交互过程和WebRTC流媒体传输协议介绍

简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一项允许在网页浏览器之间进行音视频通信的技术&#xff0c;基本不需要安装额外的插件。它的核心特点是支持低延迟的点对点&#xff08;P2P&#xff09;通讯&#xff0c;常用于视频聊天、实时文件共享、多人…

【大语言模型ChatGPT4/4o 】“AI大模型+”多技术融合:赋能自然科学暨ChatGPT在地学、GIS、气象、农业、生态与环境领域中的应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

提升编程效率的利器:Zed高性能多人协作代码编辑器

在当今这个快节奏的开发环境中&#xff0c;一个高效、灵活的代码编辑器无疑对开发者们起着至关重要的支持作用。Zed&#xff0c;作为来自知名编辑器Atom和语法解析器Tree-sitter的创造者的心血之作&#xff0c;正是这样一款高性能支持多人合作的编辑神器。本文将带领大家深入探…