C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】

  博客主页:花果山~程序猿-CSDN博客

文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客

关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!

在这里插入图片描述

目录

一.配置开发环境 

二,接口介绍

1. mysql_init

2.mysql_real_connect

3. mysql_query

4.对select结果分析

1),mysql_store_result

2)像mysql一样查看mysql数据

提取数据

提取属性名 

三,图形化界面方式连接MYSQL


嗨!收到一张超美的图,愿你每天都能顺心!

一.配置开发环境 

我们是要使用C/C++语言在代码层面对MySQL进行连接操作,我们就需要其头文件 + 源码库,按照我们之前学的关于如何使用第三方库,可以参考本博客:

使用第三库操作详解【Linux】【软硬链接 | 动,静态库 | 使用第三库】_linux下stderr的头文件-CSDN博客

但以目前我们学到这里,这种步骤成功性还是无法保证(因为我们可以通过安装mysql,会自动代入我们需要的环境)。

因此首先我们是安装mysql软件,可以参考本篇博客:

centos7.6安装mysql-CSDN博客

下载完成后,我们通过下面指令来查看是否有devel(开发库)

rpm -qa | grep mysql

如果devel有,那么我们就可以直接正常编程了,编译的时候指定一下源码库即可,如:

-L/lib64/mysql   -lmysqlclient;

 如果没有devel,那么我们需要安装一个开发库,通过下面代码:

yum install -y mysql-community-devel

如果无法安装devel(开发库),还可以到官网下载开发包,再上传到Linux,但是不推荐怎么做,因为可能会因为开发包和自己MySQL的版本不同而出现各种奇奇怪怪的问题:如ssl证书问题,套接字问题……

下面我们可以手动查一下是否有,头文件 + 源码库

二,接口介绍

 这里就只提一些C语言常用接口,有需要的可以直接找文档,MySQL :: MySQL 5.7 C API Developer Guide :: 4 C API Function Reference

1. mysql_init

信息:mysql_init函数是用于初始化一个MYSQL结构体的,这个结构体用来存储连接MySQL服务器所需的信息以及连接后的状态信息

MYSQL *mysql_init(MYSQL *mysql); // 如果第一次初始,设置为nullptr即可

返回值:成功时,返回指向初始化后的MYSQL结构体的指针。如果分配新对象时失败,则返回NULL

2.mysql_real_connect

与mysql服务端建立连接(首先我们要有mysqld的账号)。 如果通过我们写的程序来连接服务端,那我们就成了客户端了,我觉得没这个必要,我们想通过程序来进行,简化对mysql命令的操作,实现自动化提高效率。

MYSQL*  mysql_real_connect(MYSQL *mysql,      //初始化好的mysql*结构体const char *host,  // 登录主机const char *user,   // 用户const char *passwd, // 密码const char *db,     // 默认进入的库名, 可以为nullptrunsigned int port,  // 服务器端口号const char *unix_socket, // 套接字种类,一般是域间套接字,可以默认为nullptrunsigned long client_flag) // 默认为0

返回值:成功时,返回mysql,填入的初始化结构体指针;失败,返回nullptr;

关于C连接mysql编码集的问题:

我们知道已经设置了服务器的默认编码集:utf8,但C连接mysql的编码集默认是latin1,不支持中文,因此我们需要修改默认编码集。

int  mysql_set_character_set(MYSQL *mysql,  const char *csname)  // csname 可为 "utf8"

3. mysql_query

在我们在mysql中创建表后,我们就可以通过mysql_query来向mysql发送mysql指令

int  mysql_query(MYSQL *mysql, const char *stmt_str)  --mysql语句

 返回值:成功,返回0;失败,返回其他值

最简单的就是增删改,案例如下:

    mysql_set_character_set(my_sql, "utf8");std::string query = "insert  people values('张三', '12345', 1), ('李四', '520', 2)";// query = "delete from people where name = '张三';// query = 'update people set phone='1314' where id=2'if (mysql_query(my_sql, query.c_str())){std::cout << "insert fail" << std::endl;fprintf(stderr, "错误原因:%s", mysql_error(my_sql));}

就数增,删,改比较简单,因为就只有两种结果。难的是,对select 内容如何分析。

4.对select结果分析

1),mysql_store_result

功能:该变量会开辟块空间,专门在内存中接收查询出来的结果,作为未来函数的数据来源。 

MYSQL_RES* mysql_store_result(MYSQL *mysql)

怎么理解这个新的返回类型:MYSQL_RES,我们可以这样简单的理解:简单理解来说是一个 char**的数组

该函数会调用 MYSQL 变量中的 st_mysql_methods 中的 read_rows 函数指针来获取查询的结果。
同时该函数会返回 MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果
同时该函数 malloc 了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result), 不然是肯定会造成内存泄漏的。

调用的free结果集的函数是:
void  mysql_free_result  (MYSQL_RES *result)

2)像mysql一样查看mysql数据

在上面我们大概知道了MySQL_RES的基本结构,同时,mysql也是通过C/C++实现,模拟mysql客户端打印结果并不难,学习步骤如下:

获取行,列 

my_ulonglong mysql_num_rows ( MYSQL_RES * res );  -- 获取行     //  my_ulonglong  就是 unsigned long long  
my_ulonglong  mysql_num_fields ( MYSQL_RES * res );   -- 获取列

提取数据

如何循环获取MYSQL_RES中的内容,先了解下面两个接口 

MYSQL_ROW  mysql_fetch_row (MYSQL_RES *result)

功能:每次调用返回列的起始地址,并向后移动一位。通过查看MYSQL_ROW的源代码可知

mysql_fetch_row类似于迭代器的函数,每次调用将自动“++”,往后移动

截取的案例: 

    MYSQL_ROW line = 0;for (int n = 0; n < rows; n++){line = mysql_fetch_row(result);for (int k = 0; k < field; k++){std::cout << line[k] << "\t";}std::cout << std::endl;}

提取属性名 

 上面我们能查找到内容,但并没有属性框,也就是不知道每个列名,可以通过下面函数进行获取

MYSQL_FIELD * mysql_fetch_field  (MYSQL_RES *result)

返回值:返回一个结构体指针,该结构体里存放着每个列的属性数据

使用案例:

    MYSQL_FIELD* qual =  mysql_fetch_field(result);for (int j = 0; j < field; j++){std::cout << qual[j].name << "\t";}std::cout << std::endl;
另外, mysql C api 还支持事务等常用操作,大家下来自行了解 :
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql);

三,图形化界面方式连接MYSQL

         使用mysql,我们已经可以通过1.通过mysql客户端命令行操作。2. C语言代码方式连接mysql  第三种就是使用最简单的图形化界面方式来操作mysql。

使用比较好推荐:

1.PHPMyandmin(免费,体验良好)

安装流程:CentOS7 安装 phpMyAdmin - helloliyh - 博客园 (cnblogs.com)

(亲测基本上没有遇到啥问题,需要的注意点就是买的服务器,不仅需要修改自己的防火墙,而且需要在服务器控制台添加安全组

使用教程:phpMyAdmin使用教程-CSDN博客 

2.Navicat(收费但魔法,体验良好)

3.Mysql workbench(官方标配免费,但体验一般)

mysql知识先到这里了,江湖见

结语

   本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。

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

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

相关文章

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一&#xff0c;读写速度相对内存10以上&#xff0c;所以针对优化磁盘的技术非常的多&#xff0c;比如&#xff1a;零拷贝、直接I/O、异步I/O等等&#xff0c;这些优化的目的就是为了提高系统的吞吐量&#xff0c;另外操作系统内核中的…

风能远程管理ARMxy嵌入式系统深度解析

智能技术正以前所未有的速度融入传统能源管理体系&#xff0c;而ARMxy工业计算机作为这一变革中的关键技术载体&#xff0c;正以其独特的性能优势&#xff0c;为能源管理的智能化升级铺设道路。本文将聚焦于智能电表、太阳能电站监控、风力发电站远程管理三大应用场景&#xff…

react修改本地运行项目的端口

一、描述 如果你想让项目在你想要的端口打开的话&#xff0c;就需要进行设置 二、代码 设置一下pages.json文件就可以了&#xff0c;如下&#xff1a; 如果想打开项目不需要点击下面的链接地址&#xff0c;让他运行npm run dev之后自己直接打开到浏览器的话&#xff0c;在后…

万能表单与AI的完美融合,打造个性化AI小程序

在人工智能技术日益成熟的今天&#xff0c;如何将AI智能与用户界面无缝结合&#xff0c;已成为软件开发领域的新挑战。MyCms 以其创新的“万能表单结合AI”功能&#xff0c;为开发者提供了一个全新的解决方案&#xff0c;让个性化AI小程序的开发变得前所未有的简单和高效。 一、…

从零开始搭建Electron项目之运行例程

最好的学习方式就是&#xff1a;给一段能够运行的代码示例。 本文给出了例程资源&#xff0c;以及运行的步骤。 在国内开发electron有一点特别不好&#xff0c;就是如果不爬梯子&#xff0c;下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…

QSlider样式示例

参考代码&#xff1a; /********************QSlider横向滑动条样式**********************/ QSlider {background-color: rgba(170, 255, 255, 100); /* 设置滑动条主体*/ }QSlider::groove:horizontal {border: 1px solid #999999;height: 8px; /* 默认…

爬虫工具yt-dlp

yt-dlp是youtube-dlp的一个fork&#xff0c;youtube-dlp曾经也较为活跃&#xff0c;但后来被众多网站屏蔽&#xff0c;于是大家转而在其基础上开发yt-dlp。yt-dlp的github项目地址为&#xff1a;GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloaderA …

01、Linux网络设置

目录 1.1 查看及测试网络 1.1.1 查看网络配置 1、查看网络接口地址 2、查看主机状态 3、查看路由表条目 4、查看网络连接qing 1.1.2 测试网络连接 1.测试网络连接 2.跟踪数据包的路由路径 3.测试DNS域名解析 1.2 设置网络地址参数 1.2.1 使用网络配置命令 1.修改网卡…

Sentinel1.8.6更改配置同步到nacos(项目是Gateway)

本次修改的源码在&#xff1a;https://gitee.com/stonic-open-source/sentinel-parent 一 下载源码 地址&#xff1a;https://github.com/alibaba/Sentinel/releases/tag/1.8.6 二 导入idea&#xff0c;等待maven下载好各种依赖 三 打开sentile-dashboard这个模块&#xf…

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…

计算机网络学习记录 网络层 Day4(下)

计算机网络学习记录 网络层 Day4 &#xff08;下&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我…

hadoop未授权访问命令执行漏洞复现-vulfocus

1 介绍 Hadoop YARN&#xff08;Yet Another Resource Negotiator&#xff09;的ResourceManager是集群资源管理的核心组件&#xff0c;负责分配和管理集群资源以及调度作业。如果ResourceManager出现未授权访问漏洞&#xff0c;可能允许未经认证的用户访问或操作集群资源&…

在 Android App 里使用 C 代码 - NDK

原生开发套件 (NDK) 是一套工具&#xff0c;使能够在 Android 应用中使用 C 和 C 代码&#xff0c;并提供众多平台库&#xff0c;可使用这些平台库管理原生 activity 和访问实体设备组件&#xff0c;例如传感器和触控输入。 NDK 可能不适合大多数 Android 编程初学者&#xff…

2022 hnust 湖科大 javaweb课设 数据库课设 报告+源代码+流程图文件+课设指导书+附赠数据库课堂实验指导书

2022 hnust 湖科大 javaweb课设 数据库课设 报告源代码流程图文件课设指导书附赠数据库课堂实验指导书 描述 湖南科技大学大二下学期先后开展java web和数据库课程设计&#xff0c;两个课设项目可以通用&#xff0c;老师一般会允许自拟选题&#xff0c;所以在此统一打包&…

Sentinel不使用控制台基于注解限流,热点参数限流

目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意&#xff0c;使用的版本需要和你的SpringBoot版本匹配&#xff01;&#xff01; Spring-Cloud直接添加如下依赖即可&#xff0c;baba已经帮你指定好版本了。…

tomcat10部署踩坑记录-公网IP和服务器系统IP搞混

1. 服务器基本条件 使用的阿里云服务器&#xff0c;镜像系统是Ubuntu16.04java version “17.0.11” 2024-04-16 LTS装的是tomcat10.1.24阿里云服务器安全组放行了&#xff1a;8080端口 服务器防火墙关闭&#xff1a; 监听情况和下图一样&#xff1a; tomcat正常启动&#xff…

C# 集成 C++ 的方法和实践 - P/Invoke(平台调用)- 1

环境&#xff1a; 1 P/Invoke&#xff08;平台调用&#xff09;&#xff1a; C#可以通过P/Invoke调用C编写的DLL中的函数。 1.1 适用范围&#xff1a; P/Invoke 是一种在 C# 程序中调用非托管代码&#xff08;如 C 动态链接库&#xff09;的方式。这种方法适用于函数调用相对…

国外媒体软文发稿-引时代潮流-助力跨国企业蓬勃发展

大舍传媒&#xff1a;开疆拓土&#xff0c;引领传媒新潮流 随着全球经济的一体化和信息技术的高速发展&#xff0c;跨国企业在国际市场上的竞争越来越激烈。这也给跨国企业带来了巨大的机遇和挑战。在这个时代背景下&#xff0c;大舍传媒凭借其独特的优势和创新的服务模式&…

pdf的压缩该怎么做?快速在线压缩pdf的方法

pdf文件是现在很常用的一种文件格式&#xff0c;有很多的文件内容都可以通过这种格式来展示内容&#xff0c;比如一些通知文件、设计图、个人信息等等&#xff0c;文件的内容越多就会越大&#xff0c;在使用的时候经常会受到一定的限制。那么有什么方法能够快速的将pdf文件变小…

【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…