当前位置: 首页 > news >正文

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知识先到这里了,江湖见

结语

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

相关文章:

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

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一.配置开发环境 二…...

Unity DOTS技术(十五) 物理系统

要解决性能的瓶颈问题,在DOTS中我们将不再使用Unity自带的物理组件. 下面来分享一下在DOTS中当如何使用物理插件. 一.导入插件 在使用DOTS系创建的实体我们会发现,游戏物体无法受物理系统影响进行运动.于是我们需要添加物理系统插件. 1.打开Package Manager > 搜索插件Uni…...

Java线程安全

线程安全 线程安全&#xff1a;线程安全&#xff1a;synchronized同步代码块:同步方法&#xff1a;成员同步方法:静态同步方法&#xff1a; Lock:应用&#xff1a; 单例模式&#xff1a;懒汉式&#xff1a;饿汉式&#xff1a;枚举饿汉式&#xff1a;双重检验锁&#xff1a; 线程…...

Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作?回滚交易和抛出异常如何选择?

文章目录 Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作&#xff1f;场景举例&#xff1a;回滚交易和抛出异常如何选择&#xff1f; Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作&#xff1f; IERC721 nft IERC721(nftAddress)…...

SpringCloud 网关配置websocket

一、nginx https://域名.com location /websocket/ { proxy_pass http://172.1.1.173:8181/; #内网网关IP proxy_http_version 1.1; proxy_read_timeout 360s; proxy_redirect off; proxy_set_header Upgrade $http_upgrade; …...

基于JavaScript 实现近邻算法以及优化方案

前言 近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种简单的、广泛使用的分类和回归算法。它的基本思想是&#xff1a;给定一个待分类的样本&#xff0c;找到这个样本在特征空间中距离最近的 k 个样本&#xff0c;这 k 个样本的多数类别作为待…...

移动端适配和响应式页面中的常用单位

在移动端适配和响应式页面中&#xff0c;一般采用以下几种单位&#xff1a; 百分比&#xff08;%&#xff09;&#xff1a;百分比单位是相对于父元素的大小计算的。它可以用于设置宽度、高度、字体大小等属性&#xff0c;使得元素能够随着父元素的大小自动调整。百分比单位在响…...

麒麟v10系统arm64架构openssh9.7p1的rpm包

制作openssh 说明 理论上制作的多个rpm在arm64架构&#xff08;aarch64&#xff09;都适用 系统信息&#xff1a;4.19.90-17.ky10.aarch64 GNU/Linux 升级前备份好文件/etc/ssh、/etc/pam.d等以及开启telnet 升级后确认正常后关闭telnet 在之前制作过openssh-9.5p1基础上继续…...

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

&#x1f4e3;德勤 2024暑期实习测评已发&#xff0c;正在申请的小伙伴看过来哦&#x1f440; ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生&#xff0c;此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项&#xff1a; &#x1f44…...

python对视频进行帧处理以及裁减部分区域

视频截取帧 废话不多说直接上代码&#xff1a; from cv2 import VideoCapture from cv2 import imwrite# 定义保存图片函数 # image:要保存的图片名字 # addr&#xff1b;图片地址与相片名字的前部分 # num: 相片&#xff0c;名字的后缀。int 类型 def save_image(image, add…...

Python栈的编程题目

你好&#xff0c;我是悦创。 下面是三道关于栈的编程题目&#xff0c;适合不同难度级别的练习&#xff1a; 1. 有效的括号&#xff08;简单&#xff09; 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[ 和 ] 的字符串&#xf…...

ROS云课三分钟外传之CoppeliaSim_Edu_V4_1_0_Ubuntu16_04

三分钟热度试一试吧&#xff0c;走过路过不要错过。 参考之前&#xff1a; 从云课五分钟到一分钟之v-rep_pro_edu_v3_6_2-CSDN博客 git clone https://gitcode.net/ZhangRelay/v-rep_pro_edu_v3_6_2_ubuntu16_04.gittar -xf v-rep_pro_edu_v3_6_2_ubuntu16_04/V-REP_PRO_EDU…...

day28回溯算法part04| 93.复原IP地址 78.子集 90.子集II

**93.复原IP地址 ** 本期本来是很有难度的&#xff0c;不过 大家做完 分割回文串 之后&#xff0c;本题就容易很多了 题目链接/文章讲解 | 视频讲解 class Solution { public:vector<string> result;// pointNum记录加入的点的数量&#xff0c;其等于3的时候停止void b…...

SpringBoot项目启动时“jar中没有主清单属性”异常

资料参考 Spring Boot 启动时 “jar中没有主清单属性” 异常 - spring 中文网 (springdoc.cn) 实际解决 更详细的参考以上&#xff0c;我这边的话只需要在 pom文件 中加上 spring-boot-maven-plugin 插件就能解决该异常&#xff0c;具体如下&#xff1a; <build><p…...

vAttention:用于在没有Paged Attention的情况下Serving LLM

文章目录 0x0. 前言&#xff08;太长不看版&#xff09;0x1. 摘要0x2. 介绍&背景0x3. 使用PagedAttention模型的问题0x3.1 需要重写注意力kernel0x3.2 在服务框架中增加冗余0x3.3 性能开销0x3.3.1 GPU上的运行时开销0x3.3.2 CPU上的运行时开销 0x4. 对LLM服务系统的洞察0x5…...

Python实现Stack

你好&#xff0c;我是悦创。 Python 中的栈结构是一种后进先出&#xff08;LIFO, Last In, First Out&#xff09;的数据结构&#xff0c;这意味着最后添加到栈中的元素将是第一个被移除的。栈通常用于解决涉及到反转、历史记录和撤销操作等问题。在 Python 中&#xff0c;你可…...

Helm在线部署Longhorn(1.6.0版本)分布式存储

环境依赖&#xff1a; k8s (版本大于等于v1.21版本)、helm工具 安装前准备 k8s worker 节点都需要执行 yum -y --setopttsflagsnoscripts install iscsi-initiator-utils echo "InitiatorName$(/sbin/iscsi-iname)" > /etc/iscsi/initiatorname.iscsi systemctl …...

算法题目学习汇总

1、二叉树前中后序遍历:https://blog.csdn.net/cm15835106905/article/details/124699173 2、输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点&#xff0c;只能调整树中结点指针的指向。 public class Solution {private Tr…...

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑&#xff1a; DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_jenkins的安装以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…...

吊车报警的工作原理和使用场景_鼎跃安全

在现代建筑施工过程中&#xff0c;经常使用大型机械设备&#xff0c;如挖掘机、吊车、打桩机等&#xff0c;这些设备在施工过程中发挥着越来越重要的作用&#xff1b;同时&#xff0c;这些设备的作业频繁进行作业&#xff0c;对于接触到高压电线的风险也随之增加。大型机械设备…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...