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.hqwc.cn/news/235212.html

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

相关文章

App测试、H5测试及小程序测试

文章目录 前言一、App常见测试要点1.App功能测试1.1.App安装与卸载1.2.App升级测试1.3.App登陆测试1.4.离线测试1.5.触屏及操作测试1.6.App消息推送测试 2.AppUI界面测试3.App兼容性测试-适配/手机适配4.App中断测试5.App网络测试6.App安全测试7.App性能测试8.App测试与web测试…

数据结构(六):堆介绍及面试常考算法

一、堆介绍 1、定义 堆是一种图的树形结构&#xff0c;被用于实现“优先队列”&#xff08;priority queues&#xff09;。优先队列是一种数据结构&#xff0c;可以自由添加数据&#xff0c;但取出数据时要从最小值开始按顺序取出。在堆的树形结构中&#xff0c;各个顶点被称…

2023.11.27 使用anoconda搭建tensorflow环境

2023.11.27 使用anoconda搭建tensorflow环境 提供一个简便安装tensorflow的方法 1. 首先安装anoconda&#xff0c;安装过程略&#xff0c;注意安装的时候勾选安装anoconda prompt 2. 进入anoconda prompt 3. 建立python版本 conda create -n tensorflow1 python3.84. 激活t…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h

前言 续接上一篇&#xff0c;本本篇接着介绍VIR-SLAM中estimator.cpp/.h文件的函数&#xff0c;尤其是和UWB相关的相比于VINS改动过的函数&#xff0c;仍然以具体功能情况代码注释的形式进行介绍。 重点函数介绍 优化函数&#xff0c;代码是先优化&#xff0c;后边缘化。 …

java学校高校运动会报名信息管理系统springboot+jsp

课题研究方案&#xff1a; 结合用户的使用需求&#xff0c;本系统采用运用较为广泛的Java语言&#xff0c;springboot框架&#xff0c;HTML语言等关键技术&#xff0c;并在idea开发平台上设计与研发创业学院运动会管理系统。同时&#xff0c;使用MySQL数据库&#xff0c;设计实…

计算机网络(二)

&#xff08;八&#xff09;客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议&#xff0c;但是Socket接口是用协议号指定的&#xff0c;这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换&#xff0c;该函数会返回一个指向protoent的…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下&#xff1a; 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址&#xff0c;它将针对此页面运行一连…

佳易王物流快运物流单打印登记查询系统软件操作教程

一、前言&#xff08;编程应用实例系列&#xff09;&#xff1a; 佳易王物流快运物流单打印登记查询系统软件操作教程 软件有试用版&#xff0c;可以下载试用&#xff0c;了解软件操作和软件功能。 软件试用版下载可以点击最下方官网卡片 软件为绿色免安装版&#xff0c;下载…

Apache Hive3.1.3 遇到DATE_FORMAT转换2021年12月格式的问题

比如&#xff1a;需要将时间2021-12-28 00:00:00转换成2021-12的格式&#xff0c;用date_format会将2021-12转换成2022-12的问题。 解决方法&#xff1a; 方式一&#xff1a;大写的‘Y’换成‘y’ 方式二&#xff1a;字符串截取&#xff0c;substr 本博主推荐方式一&#xf…

Large Language Models areVisual Reasoning Coordinators

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 二、论文精度 2.1 论文试图解决什么问题&#xff1f; 2.2 论文中提到的解决方案之关键是什么&#xff1f; 2.3 用于定量评估的数据集是什么&#xff1f;代码有没有开源&#xff1f; 2.4 这篇论文到底有什么贡献&#xff1…

C++学习之继承中修改成员权限细节

看看下面的代码 这是错误的 class A { public:int x 10; }; class B :public A {using A::x;int x 100; };看看函数 class A { public:void fun(){cout << "uuuu" << endl;} }; class B :public A { public:using A::fun;void fun(){cout << …