【MySQL】语言连接

news/2025/2/3 7:59:02/

语言连接

  • 一、下载
  • 二、sql>mysql_get_client_info
    • 1、函数
    • 2、介绍
    • 3、示例
  • 三、其他函数
  • 四、示例

一、下载

sudo apt install sql>mysql-server
sudo apt install sql>mysql-client
sudo apt install libsql>mysqlclient-dev

在这里插入图片描述

sql>mysql_get_client_info_9">二、sql>mysql_get_client_info

1、函数

在这里插入图片描述

2、介绍

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

3、示例

#include <iostream>
#include <sql>mysql/sql>mysql.h>int main()
{std::cout << "sql>mysql版本: " << sql>mysql_get_client_info() << std::endl;return 0;
}
g++ test.cc -l sql>mysqlclient

在这里插入图片描述

三、其他函数

sql>mysql_init_33">1、sql>mysql_init

在这里插入图片描述

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

sql>mysql_real_connect_38">2、sql>mysql_real_connect

在这里插入图片描述

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

sql>mysql_query_53">3、sql>mysql_query

在这里插入图片描述

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

sql>mysql_store_result_63">4、sql>mysql_store_result

在这里插入图片描述

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

sql>mysql_free_result_69">5、sql>mysql_free_result

在这里插入图片描述

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

sql>mysql_num_fields_72">6、sql>mysql_num_fields

在这里插入图片描述

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

sql>mysql_num_rows_75">7、sql>mysql_num_rows

在这里插入图片描述

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

sql>mysql_fetch_fields_78">8、sql>mysql_fetch_fields

在这里插入图片描述

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

sql>mysql_fetch_row_84">9、sql>mysql_fetch_row

在这里插入图片描述

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

sql>mysql_close_90">10、sql>mysql_close

在这里插入图片描述

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

四、示例

sql">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 <sql>mysql/sql>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 << "sql>mysql版本: " << sql>mysql_get_client_info() << std::endl;MYSQL* ml = sql>mysql_init(nullptr);if(ml == nullptr){std::cerr << "sql>mysql_init error" << std::endl;return 1;}if(!sql>mysql_real_connect(ml, host, user, passwd, db, port, nullptr, 0)){std::cerr << "sql>mysql_real_connect error" << std::endl;return 2;}std::cout << "sql>mysql_init and sql>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 = sql>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 = sql>mysql_store_result(ml);if(res == nullptr){std::cout << "sql>mysql_store_result: the statement did not return a result set or an error occurred" << std::endl;return 4;}int rowsNum = sql>mysql_num_rows(res);int fieldsNum = sql>mysql_num_fields(res);std::cout << "rowsNum: " << rowsNum << ", fieldsNum: " << fieldsNum <<std::endl;MYSQL_FIELD* field = sql>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 = sql>mysql_fetch_row(res)){for(int i = 0; i < fieldsNum; ++i)std::cout << row[i] << "\t";std::cout << "\n";}sql>mysql_free_result(res);sql>mysql_close(ml);return 0;
}
  • 运行结果,在最后我进行了snow的插入,所以结果如下。

在这里插入图片描述

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


http://www.ppmy.cn/news/1568905.html

相关文章

第13届蓝桥杯国赛真题——公式求值c++题解,AI给的伪AC解

目前最新的DeepSeek R1写的源码&#xff0c;经测试完成了90%的测试样例&#xff0c;还有一个测试样例没通过&#xff0c;但现在这个AI模型的服务器崩溃了。 AC代码先在这里放着&#xff0c;后面等服务器恢复后&#xff0c;或者本人达到那个境界了&#xff0c;再找那个无法通过…

第六篇:事务与并发控制

第六篇&#xff1a;事务与并发控制 目标读者&#xff1a; 本篇文章适合中级数据库学习者&#xff0c;特别是那些希望理解数据库事务管理与并发控制机制的开发者或数据库管理员。通过掌握事务的原理与控制方法&#xff0c;你将能够设计高效且可靠的数据库应用&#xff0c;确保…

mac和linux传输文件

1、使用scp命令传输 # 上传 wenqiangwq ~ % scp -pr -P 22 nginx.yaml root192.168.1.15:/tmp/ root192.168.1.15s password: nginx.yaml 100% 1736 332.4KB/s 00:00# 下载 wenqiangwq ~ % scp -pr -P 22 root192.168.1.15:/tmp/ngin…

使用朴素贝叶斯对散点数据进行分类

本文将通过一个具体的例子&#xff0c;展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型&#xff0c;对二维散点数据进行分类&#xff0c;并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据&#xff0c;每个类别包含若干个点。我们将这些点分别存…

在亚马逊云科技上用Stable Diffusion 3.5 Large生成赛博朋克风图片(下)

背景介绍 在2024年的亚马逊云科技re:Invent大会上提前预告发布的Stable Diffusion 3.5 Large&#xff0c;现在已经在Amazon Bedrock上线了&#xff01;各位开发者们现在可以使用该模型&#xff0c;根据文本提示词文生图生成高质量的图片&#xff0c;并且支持多种图片风格生成&…

【Java异步编程】基于任务类型创建不同的线程池

文章目录 一. 按照任务类型对线程池进行分类1. IO密集型任务的线程数2. CPU密集型任务的线程数3. 混合型任务的线程数 二. 线程数越多越好吗三. Redis 单线程的高效性 使用线程池的好处主要有以下三点&#xff1a; 降低资源消耗&#xff1a;线程是稀缺资源&#xff0c;如果无限…

flutter-android混合编译,原生接入

关于作者&#xff1a; CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP&#xff0c;带领团队单日营收超千万。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业化变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览…

JVM的GC详解

获取GC日志方式大抵有两种 第一种就是设定JVM参数在程序启动时查看&#xff0c;具体的命令参数为: -XX:PrintGCDetails # 打印GC日志 -XX:PrintGCTimeStamps # 打印每一次触发GC时发生的时间第二种则是在服务器上监控:使用jstat查看,如下所示&#xff0c;命令格式为jstat -gc…