MySQL C代码连接

环境:5.7.42-0ubuntu0.18.04.1 (Ubuntu)

mysql接口介绍

初始化mysql指针

在这里插入图片描述

用来生成MySQL对象,返回值为MySQL*,MySQL*是MySQL对象的指针。
MySQL在mysql.h中是一个结构体
在这里插入图片描述

链接数据库

初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的)在这里插入图片描述

  • 第一个参数,填之前初始化的MySQL*指针
  • 第二个参数,填要连接的主机IP地址,如果主机为 NULL 或字符串“localhost”,则假定连接到本地主机。在 Unix 上,客户端使用 Unix 套接字文件进行连接。 unix_socket 参数或 MYSQL_UNIX_PORT 环境变量可用于指定套接字名称。否则使用TCP/IP连接。
  • 第三个参数,填要连接的用户名
  • 第四个参数,填要登录该用户使用的密码,无密码填NULL
  • 第五个参数,填要使用的数据库名字
  • 第六个参数,填主机端口号,主机参数决定连接的类型。如果 port 不为 0,则该值用作 TCP/IP 连接的端口号。
  • 第七个参数,主机参数决定连接的类型。如果 unix_socket 不为 NULL,则该字符串指定要使用的套接字或命名管道。
  • 第八个参数,一般填0,填其他则启用其他功能,具体看官网

下发mysql命令

在这里插入图片描述

  • 第一个参数上面已经介绍过
  • 第二个参数为要执行的sql语句,如“select * from table”
  • 第三个参数为第二个参数的大小,即strlen(length)

获取执行结果

sql执行完以后,如果是查询语句,我们还要读取数据,如果update,insert等语句,那么就看下操
作成功与否即可。在这里插入图片描述

  • 该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记得调用void mysql_free_result(MYSQL_RES *result),不然是肯定会造成内存泄漏的。
  • 执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了
  • 下面的api基本就是读取MYSQL_RES 中的数据。
    在这里插入图片描述
    四个接口的作用分别是:
  • 返回结果集中的行数
  • 返回结果集中的列数
  • 将结果集的一列的定义返回为 MYSQL_FIELD 结构。该结构中的name字段就是列名
  • mysql_fetch_row() 检索结果集的下一行,即它是一行一行读取的,不是所有的都返回到MYSQL_ROW

代码演示

数据库名称为11_30,表名为stu
在这里插入图片描述

#include<mysql/mysql.h>                                                                                               
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;const char *host = NULL;
const char *user = "root";
const char *passwd = NULL;
const char *db = "11_30";
unsigned int port = 0;
const char *unix_socket = NULL;
unsigned long clientflag = 0;void mysql_module()
{   //初始化MYSQL* mysql_ = mysql_init(NULL);//建立连接if(mysql_real_connect(mysql_, host, user, passwd, db, port, unix_socket, clientflag)==NULL){cout<<"连接错误"<<endl;cout<<mysql_errno(mysql_)<<endl;exit(-1);}mysql_set_character_set(mysql_, "utf8"); // 设置默认字符集//查询语句const char* stmt_str="select* from stu";if(mysql_real_query(mysql_,stmt_str,strlen(stmt_str))!=0){cout<<"执行查询失败"<<endl;cout<<mysql_errno(mysql_)<<endl;exit(-1);}//获取查询结果保存在MYSQL_RES中MYSQL_RES* res=NULL;res = mysql_store_result(mysql_);if(res==NULL){perror("返回结果集失败或者为空");printf("%u\n",mysql_errno(mysql_));exit(-1);}uint64_t rows = mysql_num_rows(res);//获取行数unsigned int cols = mysql_num_fields(res);//获取列数MYSQL_FIELD * filed = mysql_fetch_fields(res);//获取列名cout<<"行:"<<rows<<endl;cout<<"列:"<<cols<<endl;//打印结果集for(int i=0;i<cols;i++){printf("%s ",filed[i].name);}printf("\n");for(int i=0;i<rows;i++){MYSQL_ROW content = mysql_fetch_row(res);//获取结果内容for(int j=0;j<cols;j++)printf("%s ",content[j]);printf("\n");}mysql_free_result(res);mysql_close(mysql_);//关闭连接
}
int main(){mysql_module();return 0;
}

打印结果:
在这里插入图片描述

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

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

相关文章

安防监控系统的工作原理是什么?具体包含哪些组成部分?

关于安防监控系统&#xff0c;大家熟知的就是监控系统平台&#xff0c;其实不然&#xff0c;智能视频安防监控系统涵盖的内容非常多&#xff0c;今天小编就和大家一起来探讨一下。 安防监控视频系统主要分为以下7大类&#xff1a; 1、 摄像头采集图像 安防监控系统通常使用摄…

11-30 SpringBoot

内嵌的tomcat tomcat的依赖 对于tomcat其实还是一个jar包 spring是一个IOC容器 tomcat的核心对象交给Spring容器 调用核心对象方法 启动Tomcat 1.添加依赖 tomcat-embed-core&#xff0c;叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中的 排除tomcat&a…

Nginx(无法解析PHP网页如何解决?FPM解决你的烦恼!)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

Android笔记(十六):前台服务

设置服务为前台服务。前台服务会在状态栏显示一个通知。通知界面与服务进行关联。 一、什么是通知&#xff1f; Notification通知是在移动应用APP提供给用户的消息提示&#xff0c;是在移动系统的通知栏中显示。当移动应用不在运行时或者在后台状态下&#xff0c;通过发布通知…

数据挖掘实战-基于word2vec的短文本情感分析(文末送书)

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

易点易动固定资产管理系统:提升企业固定资产管理效率的利器

固定资产是企业运营中重要的组成部分&#xff0c;对于企业的正常运转和发展至关重要。然而&#xff0c;传统的固定资产管理方法通常存在效率低下、信息不透明等问题。为了解决这些挑战&#xff0c;易点易动固定资产管理系统应运而生。本文将探讨易点易动固定资产管理系统的概念…

9款高效绘图神器,提升你的工作效率

在日常工作或生活中&#xff0c;我们必须绘制各种图表、流程图、思维导图等图形&#xff0c;或者想用画笔描述自己的想法。然而&#xff0c;我们在许多绘图软件面前感到困惑。我们不知道哪个绘图软件好&#xff0c;也没有足够的时间一一尝试 在接下来的空间里&#xff0c;我们…

堆栈_有效括号

题比较特殊&#xff0c;主要在于它的所有要输入&#xff0c;都是左括号开头&#xff0c;没有右括号开头的&#xff0c;比如"] ["&#xff0c;这种是不算为括号的&#xff0c;由于必然是对称的&#xff0c;若能符合&#xff0c;因而直接在遇到右括号时&#xff0c;检查…

基于python实现心血管疾病风险预测分析

一、项目简介 项目背景 利用心血管疾病风险预测数据集进行深入分析&#xff0c;探究不同因素与心血管疾病风险之间的关联。 数据源 Kaggle上的心血管疾病风险预测数据集。&#xff08;Cardiovascular Diseases Risk Prediction Dataset | Kaggle&#xff09; 二、数据预处…

视图层、模板(补充)

视图层 响应对象 响应---》本质都是 HttpResponse HttpResponse---》字符串render----》放个模板---》模板渲染是在后端完成 js代码是在客户端浏览器里执行的模板语法是在后端执行的redirect----》重定向 字符串参数不是是空的状态码是 3开头JsonResponse---》json格式数据 …

Moonbeam生态项目分析 — — DeFi借贷协议Moonwell

流动性激励计划Moonbeam Ignite是帮助用户轻松愉快体验Moonbeam生态的趣味活动。在Moonbeam跨链连接的推动下&#xff0c;DeFi的各种可能性在这里爆发。DeFi或许不热门&#xff0c;但总有机会捡漏&#xff0c;了解Monbeam生态项目&#xff0c;我们邀请Moonbeam大使分享他们的研…

【linux防火墙】设置开启路由转发,SNAT和DNAT转换原理及应用实操,添加自定义链归类iptables规则

目录 一、关于iptables规则的保存 1.1持久保存规则 1.2加载规则 1.3开机自动加载规则 1.4使用iptables-service软件来进行规则的保存和加载&#xff08;不建议使用&#xff09; 二、SNAT和DNAT的原理和应用 SNAT的原理与应用&#xff1a; DNAT的原理和应用&#xff1a; …

在java java.util.Date 已知逝去时间怎么求年月日 数学计算不用其他方法

在Java中&#xff0c;使用java.util.Date类已知逝去时间求年月日的方法如下&#xff1a; 首先&#xff0c;获取当前时间和逝去时间之间的毫秒数差值&#xff0c;可以使用Date类的getTime()方法获得时间戳。 将毫秒数转换为秒数&#xff0c;并计算出总共的天数。 根据总共的天…

应用软件快速开发平台,一起实现办公流程化发展!

做好办公流程化发展能给企业带来什么好处&#xff1f;其实&#xff0c;在快节奏发展社会中&#xff0c;很多企业的规模和业务量也在不断扩展中&#xff0c;如果还是懒散的办公方式是不能达到事半功倍的效果的。要想实现高效率发展&#xff0c;采用办公流程化发展能让企业管理朝…

【广州华锐互动】节约用水VR互动教育:身临其境体验水资源的珍贵!

随着技术的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在许多领域得到了广泛应用。在节水宣传教育方面&#xff0c;VR技术也展现出了其独特的优势。与传统宣传教育方式相比&#xff0c;节约用水VR互动教育具有更加沉浸式、互动性和实践性的特点&#xff0c;能…

【全栈开发】Next.js与RedwoodJS——比较js框架

Next.js和RedwoodJS是两个广泛用于构建web应用程序的JavaScript框架。这两个框架都提供了一系列功能和好处&#xff0c;但它们在方法和理念上有所不同。在本文中&#xff0c;我们将仔细研究Next.js和RedwoodJS&#xff0c;并对它们进行比较&#xff0c;以帮助您为项目选择正确的…

java开发之基于个微群聊二次开发

请求URL&#xff1a; http://域名地址/getGroupQrCode 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是String登录实例标识chatRoomI…

强化学习-DQN

网上看来很多&#xff0c;但是还是觉得这篇文章将得最好&#xff1a; 可视化强化学习解释 - Deep Q Networks&#xff0c;循序渐进 |Ketan Doshi 博客 (ketanhdoshi.github.io)

泛域名SSL证书是什么?泛域名SSL证书价格多少钱?

泛域名SSL证书是一种SSL证书类型&#xff0c;也被称为通配符SSL证书。SSL证书是保护网站数据传输安全及服务器身份可信的数字证书产品&#xff0c;通常绑定域名或IP&#xff0c;配置到网站服务器上。SSL证书根据保护域名数量及域名类型的不同&#xff0c;可以分为单域名SSL证书…

CentOS7.5搭建Hadoop-3.3.6集群的详细操作流程-实操版本

一、准备工作 1、安装 VMware&#xff0c;已安装的&#xff0c;跳过此步骤即可 官方正版VMware下载&#xff08;16 pro&#xff09;&#xff1a;https://www.aliyundrive.com/s/wF66w8kW9ac 安装&#xff1a;选一下安装地址&#xff0c;一直下一步即可。&#xff08;可能会要…