【MySQL】语言连接

语言连接

  • 一、下载
  • 二、mysql_get_client_info
    • 1、函数
    • 2、介绍
    • 3、示例
  • 三、其他函数
    • 1、mysql_init
    • 2、mysql_real_connect
    • 3、mysql_query
    • 4、mysql_store_result
    • 5、mysql_free_result
    • 6、mysql_num_fields
    • 7、mysql_num_rows
    • 8、mysql_fetch_fields
    • 9、mysql_fetch_row
    • 10、mysql_close
  • 四、示例

一、下载

sudo apt install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev

在这里插入图片描述

二、mysql_get_client_info

1、函数

在这里插入图片描述

2、介绍

  • mysql_get_client_info 是一个用于获取 MySQL 客户端库版本信息的函数。它返回一个指向以 null 结尾的字符串,该字符串表示 MySQL 客户端库的版本。

3、示例

  • 尝试链接mysql client
#include <iostream>
#include <mysql/mysql.h>

int main()
{
    std::cout << "mysql版本: " << mysql_get_client_info() << std::endl;
    return 0;
}
g++ test.cc -l mysqlclient

在这里插入图片描述

三、其他函数

1、mysql_init

在这里插入图片描述

  • mysql_init 是 MySQL C API 中的一个函数,它的主要功能是分配或初始化一个 MYSQL 对象,使其适用于后续的 mysql_real_connect 函数来建立与 MySQL 数据库的连接。它是建立数据库连接的第一步。
  • 参数mysql是一个指向 MYSQL 结构的指针。如果传递 NULL,mysql_init 将分配并初始化一个新的 MYSQL 结构;如果不为 NULL,则该函数将初始化已存在的 MYSQL 结构。
  • 成功时,返回一个指向已初始化 MYSQL 结构的指针。失败时,返回 NULL。失败的原因通常是因为内存不足,无法分配新的 MYSQL 结构。

2、mysql_real_connect

在这里插入图片描述

  • mysql_real_connect 用于建立一个到 MySQL 数据库服务器的连接。在调用 mysql_real_connect 之前,必须调用 mysql_init 来初始化 MYSQL 结构。
参数说明
mysql一个指向 MYSQL 结构的指针,该结构在调用 mysql_init 后被初始化
hostMySQL 服务器的主机名或 IP 地址。如果为 NULL 或字符串 “localhost”,则假定为到本地主机的连接
user用于登录数据库的用户名。如果为 NULL,则假定为当前用户
passwd用户密码。如果为 NULL,则仅对该用户的(拥有空密码字段的)用户表中的条目进行匹配检查
db数据库名称。如果指定,连接后将选择这个数据库
portMySQL 服务器的端口号。如果为 0,则使用默认端口(通常是 3306)
unix_socket用于连接的 Unix 域套接字或管道的路径。如果为 NULL,则不使用 Unix 套接字
client_flag用于设置客户端标志的位字段。通常设置为 0,但也可以设置为特定功能的组合

3、mysql_query

在这里插入图片描述

  • mysql_query 用于在已经建立的数据库连接上执行 SQL 语句。成功时,返回 0。失败时,返回非 0 值。
参数说明
mysql一个指向已经通过 mysql_real_connect 或类似函数成功连接到 MySQL 服务器的 MYSQL 结构体的指针
stmt_str要执行的 SQL 语句的字符串。这个字符串应该是一个以空字符 (‘\0’) 结尾的 C 字符串

4、mysql_store_result

在这里插入图片描述

  • mysql_store_result 用于检索由 mysql_query 执行的 SELECT 语句的结果集,并将其存储在 MYSQL_RES 结构中,以便后续逐行处理。使用完后需要调用mysql_free_result来释放与之关联的内存资源,以避免内存泄漏。
  • 成功时,返回一个指向 MYSQL_RES 结构体的指针,该结构体包含了结果集的数据。失败时,返回 NULL。
    在这里插入图片描述

5、mysql_free_result

在这里插入图片描述

  • mysql_free_result 用于释放由 mysql_store_result 或类似函数返回的结果集所占用的内存。

6、mysql_num_fields

在这里插入图片描述

  • mysql_num_fields 用于获取由 mysql_store_result 或 mysql_use_result 返回的结果集中的字段(列)数量。即函数返回一个无符号整数,表示结果集中的字段数量。

7、mysql_num_rows

在这里插入图片描述

  • mysql_num_rows 用于获取由 mysql_store_result 返回的结果集中的行数。即函数返回值表示结果集中的行数。如果结果集为空或检索结果集时发生错误,返回值可能是 0。

8、mysql_fetch_fields

在这里插入图片描述

  • mysql_fetch_fields 用于从由 mysql_store_result 返回的结果集中检索所有字段(列)的信息。这个函数返回一个指向 MYSQL_FIELD 结构体数组的指针,其中每个结构体都包含了结果集中一个字段的详细信息。
  • 如果结果集为空或发生错误,返回值可能是 NULL。但通常,只要 mysql_store_result 成功返回了一个结果集,mysql_fetch_fields 就会返回一个有效的指针。
    在这里插入图片描述

9、mysql_fetch_row

在这里插入图片描述

  • mysql_fetch_row 用于从由 mysql_store_result 或 mysql_use_result 返回的结果集中逐行检索数据。
  • 每次调用 mysql_fetch_row 时,它都会返回结果集中的下一行数据,直到没有更多行时返回 NULL。
    在这里插入图片描述

10、mysql_close

在这里插入图片描述

  • mysql_close 用于关闭先前使用 mysql_init 初始化的数据库连接。在应用程序完成对数据库的操作后,应该调用此函数来释放与连接相关的资源,并确保与 MySQL 服务器的连接被正确关闭。

四、示例

  • 创建用户,数据库。方便测试
create database conn;
create user connector@localhost identified by '123456';
grant all on conn.* to connector@localhost;

use conn;

create table user(
id int primary key auto_increment,
name varchar(12)
);
  • C++代码
#include <iostream>
#include <string>
#include <mysql/mysql.h>

const char *host = "localhost";
const char *user = "connector";
const char *passwd = "123456";
const char *db = "conn";
unsigned int port = 3306;

int main()
{
    // std::cout << "mysql版本: " << mysql_get_client_info() << std::endl;

    MYSQL* ml = mysql_init(nullptr);
    if(ml == nullptr)
    {
        std::cerr << "mysql_init error" << std::endl;
        return 1;
    }
    if(!mysql_real_connect(ml, host, user, passwd, db, port, nullptr, 0))
    {
        std::cerr << "mysql_real_connect error" << std::endl;
        return 2;
    }
    std::cout << "mysql_init and mysql_real_connect success" << std::endl;

    // std::string query = "insert into user (name) values ('snow')";
    // std::string query = "insert into user (name) values ('dragon')";
    // std::string query = "delete from user where name='snow'";
    std::string query = "select * from user";

    int n = mysql_query(ml, query.c_str());
    if(n == 0)
        std::cout << query << " : success" << std::endl;
    else
    {
        std::cerr << query << " : error" << std::endl;
        return 3;
    }

    MYSQL_RES* res = mysql_store_result(ml);
    if(res == nullptr)
    {
        std::cout << "mysql_store_result: the statement did not return a result set or an error occurred" << std::endl;
        return 4;
    }
    
    int rowsNum = mysql_num_rows(res);
    int fieldsNum = mysql_num_fields(res);

    std::cout << "rowsNum: " << rowsNum << ", fieldsNum: " << fieldsNum <<std::endl;

    MYSQL_FIELD* field = mysql_fetch_fields(res);
    for(int i = 0; i < fieldsNum; ++i)
        std::cout << field[i].name << "\t";
    std::cout << "\n";
    
    MYSQL_ROW row;
    while(row = mysql_fetch_row(res))
    {
        for(int i = 0; i < fieldsNum; ++i)
            std::cout << row[i] << "\t";
        std::cout << "\n";
    }
	
	mysql_free_result(res);
    mysql_close(ml);

    return 0;
}
  • 运行结果,在最后我进行了snow的插入,所以结果如下。

在这里插入图片描述

本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
本文只是在学习过程中所做的总结,不会涉及过深的概念
创作不易,如果觉得博主写得不错,请点赞、收藏加关注支持一下💕💕💕

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束&#xff0c;区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用&#xff0c;需谨慎设计 添加…

本地缓存~

前言 Caffeine是使用Java8对Guava缓存的重写版本&#xff0c;在Spring Boot 2.0中取而代之&#xff0c;基于LRU算法实现&#xff0c;支持多种缓存过期策略。 以下摘抄于https://github.com/ben-manes/caffeine/wiki/Benchmarks-zh-CN 基准测试通过使用Java microbenchmark ha…

视觉状态空间模型(VMamba)的解读

在计算机视觉领域&#xff0c;设计计算高效的网络架构一直是研究的热点。今天&#xff0c;我想和大家分享一篇发表在 NIPS 2024 上的论文——VMamba&#xff1a;Visual State Space Model&#xff0c;这篇论文提出了一种新的视觉骨干网络&#xff0c;具有线性时间复杂度&#x…

Kanass基础教程-创建项目

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用&#xff0c;开源免费&#xff0c;之前介绍过kanass的一些产品简介及安装配置方法&#xff0c;本文就从如何创建第一个项目来开始kanass上手之旅吧。 1. 创建项目 点击项目->项目添加 按钮进入项目添加页面…

问题的价值 ( Value of Question ) 公式

一、什么是问题的价值 我们的人生、工作的期间、瞬息万变的商业环境中&#xff0c;我们必然会面对很多问题&#xff0c;也会提出很多问题。 但这些问题是否具有回答的 价值&#xff0c;应该如何 衡量 呢&#xff1f; 简单如&#xff0c;女朋友问今晚应该吃什么、世界如何才能…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

在GPIO控制器中,配置通用输入,读取IO口电平时,上拉和下拉起到什么作用

上下拉电阻作用 在通用输入的时候&#xff0c;也就是在读某个IO的电平的时候 一定要让IO口先保持一个电平状态&#xff0c;这样才能检测到不同电平状态。 如何保持电平状态&#xff1f; 1. 可以通过芯片内部的上下拉电阻&#xff0c;由于是弱上下拉一般不用 2. 硬件外界一个…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中&#xff0c;我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1&#xff0c;这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本&#xff0c;但增加…

SAP HCM insufficient authorization, no.skipped personnel 总结归纳

导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限&#xff0c;结构化权限就是按照部门ID授权&#xff0c;颗粒度更细&#xff0c;对分工明细化的单位尤其重要&#xff0c;今天遇到的问题就是结构化权限的问题。 作者&#xff1a;vivi&#xff0c;来源&…

python-leetcode-二叉树的右视图

199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solut…

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD&#xff01; GBD数据库挖掘是目前的四大刊常客&#xff0c;经常出现在顶级期刊上面。这个数据库亮点就是&#xff1a;可视化&#xff0c;统计学简单、而数据可…

Maven全解析:从基础到精通的实战指南

概念&#xff1a; Maven 是跨平台的项目管理工具。主要服务基于 Java 平台的构建&#xff0c;依赖管理和项目信息管理项目构建&#xff1a;高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准化的流程 依赖管理&#xff1a; 对第三方依赖包的管理&#xf…

使用LLaMA-Factory对AI进行认知的微调

使用LLaMA-Factory对AI进行认知的微调 引言1. 安装LLaMA-Factory1.1. 克隆仓库1.2. 创建虚拟环境1.3. 安装LLaMA-Factory1.4. 验证 2. 准备数据2.1. 创建数据集2.2. 更新数据集信息 3. 启动LLaMA-Factory4. 进行微调4.1. 设置模型4.2. 预览数据集4.3. 设置学习率等参数4.4. 预览…

复制粘贴小工具——Ditto

在日常工作中&#xff0c;复制粘贴是常见的操作&#xff0c;但Windows系统自带的剪贴板功能较为有限&#xff0c;只能保存最近一次的复制记录&#xff0c;这对于需要频繁复制粘贴的用户来说不太方便。今天&#xff0c;我们介绍一款开源、免费且功能强大的剪贴板增强工具——Dit…

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统&#xff0c;openipc 是采用buildroot系统编译而成&#xff0c;因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢&#xff1f;因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来&#xff0c;从而…

Redis代金卷(优惠卷)秒杀案例-多应用版

Redis代金卷(优惠卷)秒杀案例-单应用版-CSDN博客 上面这种方案,在多应用时候会出现问题,原因是你通过用户ID加锁 但是在多应用情况下,会出现两个应用的用户都有机会进去 让多个JVM使用同一把锁 这样就需要使用分布式锁 每个JVM都会有一个锁监视器,多个JVM就会有多个锁监视器…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护&#xff08;Predictive…

基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

【学习笔记】深度学习网络-正则化方法

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…