首页 > 数据库 >C/C++连接mysql(api接口方法详解)

C/C++连接mysql(api接口方法详解)

时间:2023-11-04 16:34:25浏览次数:53  
标签:语句 get mysql C++ api MySQL 连接 API

 

 

前言
本篇记录C/C++连接mysql利用mysql的api接口的方法:这个方法的代码基本上很久都没有变过了,这里做个笔记来简单学习一下,还有一种方法等有时间了解后再来更新

使用API的方式连接,需要先做环境配置,加载mysql的头文件和lib文件。可以看我之前的一篇文章

VS中C/C++访问MySQL数据库

 

代码笔记

#include <stdio.h> 
#include <mysql.h> // mysql 文件,如果配置ok就可以直接包含这个文件

int main(void) {
    MYSQL mysql; //数据库句柄
    MYSQL_RES* res; //查询结果集 
    MYSQL_ROW row; //记录结构体

    //初始化数据库 
    mysql_init(&mysql);
    
    //设置字符编码
    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
    
    //连接数据库
    if (mysql_real_connect(&mysql, "127.0.0.1", "root",
        //"password", "database_name"分别填写自己的的数据库登录密码和表所在的数据库名称
        //这里替换成自己的的数据库等路密码和自己所建的数据库名称即可
        "password", "database_name", 3306, NULL, 0) == NULL) {
        
        printf("错误原因: %s\n", mysql_error(&mysql));
        printf("连接失败!\n");
        exit(-1);
    }
    
    //查询数据
    int ret = mysql_query(&mysql, "select * from student;");
    //student是自己在数据库中所建的表名
    printf("ret: %d\n", ret);
    
    //获取结果集
    res = mysql_store_result(&mysql);
    
    //给 ROW 赋值,判断 ROW 是否为空,不为空就打印数据。
    while (row = mysql_fetch_row(res)) {
        printf("%s ", row[0]); //打印 ID
        printf("%s ", row[1]); //打印姓名
        printf("%s ", row[2]); //打印班级
        printf("%s \n", row[3]);//打印性别
    }
    
    //释放结果集 
    mysql_free_result(res); 
    
    //关闭数据库
    mysql_close(&mysql);
    system("pause");
    return 0;
}

 

注意:

1、使用c++语句对数据库进行增删改查,在使用c++中string类型时,需要把string类型转换为c中的类型,使用mysql_query函数把sql语句提交,操作成功返回0,结果会被保存到mysql对象中,操作失败会返回非0值

string str = "insert into tb_77 values(5,'sdmqy','h');"  
mysql_query(&mysql, str.c_str());

2、调用 mysql_real_query() 或 mysql_query() 后,必须为每个调用 mysql_store_result() 或 mysql_use_result() 成功生成结果集的语句(选择、显示、描述、解释、检查表等)。 还必须在你之后调用 mysql_free_result() 完成结果集。

C API 基本接口概述

应用程序应将此一般大纲用于 通过客户端库与MySQL交互:

  1. 通过调用 mysql_library_init() 初始化 MySQL 客户端库。
  2. 通过调用 mysql_init() 初始化连接处理程序并连接到服务器通过调用连接建立函数,例如mysql_real_connect()。
  3. 发出 SQL 语句并处理其结果。有关如何执行此操作的详细信息
  4. 通过调用 mysql_close() 关闭与 MySQL 服务器的连接。
  5. 通过调用 mysql_library_end() 来最终使用 MySQL 客户端库。

 

附1 :C API 基本数据结构参考

名字 描述
MYSQL 这个结构代表一个数据连接的句柄,它几乎用于所有MySQL函数。
MYSQL_RES  这个结构体代表一个询问语句的返回值(SELECT,SHOW, DESCRIBE, EXPLAIN),查询语句返回的信息叫做结果集
MYSQL_ROW 这是一行数据的”类型安全“表示。,可以把它看成一个字符串集(但是如果他包含二进制数据的话,就不能这样做,因为很多数据内部都包含Null字节),行是通过mysql_fetch_row()获得的。

 

MySQL :: MySQL 8.0 C API 开发人员指南 :: 5.2 C API 基本数据结构

 

附2 :C API 基本函数参考

名字 描述 介绍 荒废的
mysql_affected_rows() 上次更新、删除或插入语句更改/删除/插入的行数    
mysql_autocommit() 设置自动提交模式    
mysql_bind_param() 为执行的下一条语句定义查询属性 8.0.23  
mysql_change_user() 在打开的连接上更改用户和数据库    
mysql_character_set_name() 当前连接的默认字符集名称    
mysql_close() 关闭与服务器的连接    
mysql_commit() 提交事务    
mysql_connect() 连接到 MySQL 服务器,现已改用mysql_real_connect()   是的
mysql_create_db() 创建数据库,改用 mysql_real_query()或 mysql_query() 发出 SQL CREATE DATABASE 语句   是的
mysql_data_seek() 查找查询结果集中的任意行号    
mysql_debug() 使用给定字符串执行DBUG_PUSH    
mysql_drop_db() 删除数据库,改用 mysql_real_query()或 mysql_query() 发出 SQL DROP DATABASE 语句   是的
mysql_dump_debug_info() 导致服务器将调试信息写入错误日志    
mysql_eof() 确定是否已读取结果集的最后一行   是的
mysql_errno() 最近调用的 MySQL 函数的错误号    
mysql_error() 最近调用的 MySQL 函数的错误消息    
mysql_escape_string() 转义字符串中用于 SQL 语句的特殊字符    
mysql_fetch_field() 下一个表字段的类型    
mysql_fetch_field_direct() 给定字段编号的表字段类型    
mysql_fetch_fields() 返回所有字段结构的数组    
mysql_fetch_lengths() 返回当前行中所有列的长度    
mysql_fetch_row() 提取下一个结果集行    
mysql_field_count() 最新语句的结果列数    
mysql_field_seek() 查找结果集行中的列    
mysql_field_tell() 上次 mysql_fetch_field() 调用的字段位置    
mysql_free_result() 释放结果集内存    
mysql_free_ssl_session_data() 释放上次 mysql_get_ssl_session_data() 调用的会话数据句柄 8.0.29  
mysql_get_character_set_info() 有关默认字符集的信息    
mysql_get_client_info() 客户端版本(字符串)    
mysql_get_client_version() 客户端版本(整数)    
mysql_get_host_info() 有关连接的信息    
mysql_get_option() mysql_options() 选项的值    
mysql_get_proto_info() 连接使用的协议版本    
mysql_get_server_info() 服务器版本号(字符串)    
mysql_get_server_version() 服务器版本号(整数)    
mysql_get_ssl_cipher() 当前 SSL 密码    
mysql_get_ssl_session_data() 返回启用 SSL 的连接的会话数据 8.0.29  
mysql_get_ssl_session_reused() 会话是否重复使用 8.0.29  
mysql_hex_string() 以十六进制格式对字符串进行编码    
mysql_info() 有关最近执行的语句的信息    
mysql_init() 获取或初始化结构MYSQL    
mysql_insert_id() 为列生成的 ID 以前的声明AUTO_INCREMENT    
mysql_kill() 终止线程   是的
mysql_library_end() 完成 MySQL C API 库    
mysql_library_init() 初始化 MySQL C API 库    
mysql_list_dbs() 返回与正则表达式匹配的数据库名称    
mysql_list_fields() 返回与正则表达式匹配的字段名称    
mysql_list_processes() 当前服务器线程列表    
mysql_list_tables() 返回与正则表达式匹配的表名    
mysql_more_results() 检查是否存在更多结果    
mysql_next_result() 在多结果执行中返回/启动下一个结果    
mysql_num_fields() 结果集中的列数    
mysql_num_rows() 结果集中的行数    
mysql_options() 连接前设置选项    
mysql_options4() 连接前设置选项    
mysql_ping() Ping 服务器    
mysql_query() 执行语句    
mysql_real_connect() 连接到 MySQL 服务器    
mysql_real_connect_dns_srv() 使用 DNS SRV 记录连接到 MySQL 服务器 8.0.22  
mysql_real_escape_string() 对语句字符串中的特殊字符进行编码    
mysql_real_escape_string_quote() 对语句字符串中的特殊字符进行编码,以 引用上下文    
mysql_real_query() 执行语句    
mysql_refresh() 刷新或重置表和缓存    
mysql_reload() 重新加载授权表   是的
mysql_reset_connection() 重置连接以清除会话状态    
mysql_reset_server_public_key() 从客户端库中清除缓存的 RSA 公钥    
mysql_result_metadata() 结果集是否具有元数据 8.0.13  
mysql_rollback() 回滚事务    
mysql_row_seek() 查找结果集中的行偏移量    
mysql_row_tell() 结果集行中的当前位置    
mysql_select_db() 选择数据库    
mysql_server_end() 完成 MySQL C API 库    
mysql_server_init() 初始化 MySQL C API 库    
mysql_session_track_get_first() 会话状态更改信息的第一部分    
mysql_session_track_get_next() 会话状态更改信息的下一部分    
mysql_set_character_set() 设置当前连接默认字符集    
mysql_set_local_infile_default() 设置加载数据 本地处理程序回调到默认值    
mysql_set_local_infile_handler() 安装特定于应用程序的加载数据 本地处理程序回调    
mysql_set_server_option() 设置当前连接的选项    
mysql_shutdown() 关闭 MySQL 服务器    
mysql_sqlstate() 最近调用的 MySQL 函数的 SQLSTATE 值    
mysql_ssl_set() 准备与服务器建立 SSL 连接    
mysql_stat() 服务器状态    
mysql_store_result() 检索和存储整个结果集    
mysql_thread_id() 当前线程 ID    
mysql_use_result() 启动逐行结果集检索    
mysql_warning_count() 上一个语句的警告计数    

 


MySQL :: MySQL 8.0 C API 开发人员指南 :: 5.3 C API 基本函数参考

 

转 : https://blog.csdn.net/qq_45491628/article/details/128934998

标签:语句,get,mysql,C++,api,MySQL,连接,API
From: https://www.cnblogs.com/fps2tao/p/17809118.html

相关文章

  • MySQL正则表达式
    1. 正则表达式运算符expressionNOTREGEXPpattern,expressionNOTRLIKEpatternexpressionREGEXPpattern,expressionRLIKEpattern如果表达式expression匹配给定模式pattern返回1,否则返回0.如果表达式expression或者模式pattern为NULL,则返回NULLRLIKE和REGEXP一样.2......
  • MySQL 获取MySQL列中字符串出现的次数
    使用SUM()和LIKE语句计算字符串出现次数首先,我们可以使用SUM()函数和LIKE语句计算特定字符串在某一列中出现的次数。具体实现方法如下:SELECTSUM(CASEWHENcolumn_nameLIKE'%search_string%'THEN1ELSE0END)assearch_countFROMtable_name;SQLCopy其中,column_name为需要......
  • Mysql查询字符串中某个字符串出现的次数
    目录1.查单个字符出现的次数2.查多个字符出现的次数3.函数讲解1.查单个字符出现的次数比如我想查howdoyoudo字符串当中出现d的次数:第一眼看上去有点懵,首先mysql并没有直接计算出现字符次数的函数,所以才使用了下面这种方式,其实就是将出现的字符串给替换为了空。然后让原数据减去......
  • 图解C/C++灵魂:指针变量
    1、指针变量的基本操作基本操作inta,*iptr,*jptr,*kptr;iptr=&a;jptr=iptr;*jptr=100;kptr=NULL;图解:1.1己址和己空间指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machineword),32位的......
  • 与c++比较学习rust3-1:变量和可变性
    rust文章:变量和可变性let,const这两个在c++中,没有与let相同的用法,letlet有点像constauto1.1.相同点:不需要指定类型。使用了constauto之后,不能改变值也不能改变类型。1.2.不同点:rust合法,c++中不合法(即c++中,不能重复定义一个变量)leta=2;leta=4;le......
  • 利用Lazada API揭秘电商数据:一键获取海量商品评论列表!
    要使用LazadaAPI获取Lazada商品评论列表,您需要先注册Lazada开发者账号并获取授权码和密钥。然后,通过调用LazadaAPI的item_comments接口,传入商品ID和国家域名后缀,即可获取到商品的评论列表。以下是使用LazadaAPI获取Lazada商品评论列表的步骤:注册Lazada开发者账号并获取授权码和......
  • Mysql 8.0 下载及安装教程
    软件介绍:MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。 安装和使用教程:1.通过文章末尾处......
  • 【每日例题】蓝桥杯 c++ 串的处理
    串的处理题目题目描述在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1.把每个单词的首字母变为大写。 2.把数字与字母之间用下划线字符(_)分开,使得更清晰3.把单词中间有多个空格的调整为1个空格。输入描......
  • Mysql为什么存储表数据为什么不能超过2000万行,深度解释 转发 https://www.toutiao.co
    下面是我朋友的面试记录:面试官:讲一下你实习做了什么。朋友:我在实习期间做了一个存储用户操作记录的功能,主要是从MQ获取上游服务发送过来的用户操作信息,然后把这些信息存到MySQL里面,提供给数仓的同事使用。朋友:由于数据量比较大,每天大概有四五千多万条,所以我还给它做了分表的操......
  • 【每日例题】蓝桥杯 c++ 最大降雨量
    最大降雨量题目本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。这个法术需要用到他手中的49张法术符,上面分别写着1至49这49个数字。法术—共持续7周,每天小明都要使用—张法术符,法术符不能......