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

【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的插入,所以结果如下。

在这里插入图片描述

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


http://www.kler.cn/a/529883.html

相关文章:

  • 【llm对话系统】大模型 Llama 源码分析之归一化方法 RMS Norm
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • Linux命令入门
  • https的原理
  • vue虚拟列表优化前端性能
  • DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)
  • LVM 逻辑卷管理
  • ChatBox调用Ollama本地部署的DeepseekR1
  • 构建由局部观测、分布式决策与全局奖励协同作用的多智能体强化学习系统
  • 吴恩达深度学习——机器学习的策略
  • 重生之我在异世界学编程之C语言:深入指针篇(上)
  • Avalonia与QtQuick的简单对比
  • [Java]多态
  • 本地Deepseek添加个人知识库
  • js对象方法大全
  • leetcode——删除链表的倒数第N个节点(java)
  • Lesson 125 Tea for two
  • Tensorflow 中的卷积神经网络(CNN)
  • 【背包问题】二维费用的背包问题
  • 力扣动态规划-18【算法学习day.112】
  • C#基础知识
  • 【C++语言】卡码网语言基础课系列----13. 链表的基础操作I
  • 7.DP算法
  • LabVIEW如何高频采集温度数据?
  • lstm预测
  • 解密高性能异步I/O:io_uring的魔力与应用