前言
本篇记录C/C++连接mysql利用mysql的api接口的方法:这个方法的代码基本上很久都没有变过了,这里做个笔记来简单学习一下,还有一种方法等有时间了解后再来更新
使用API的方式连接,需要先做环境配置,加载mysql的头文件和lib文件。可以看我之前的一篇文章
代码笔记
#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交互:
- 通过调用 mysql_library_init() 初始化 MySQL 客户端库。
- 通过调用 mysql_init() 初始化连接处理程序并连接到服务器通过调用连接建立函数,例如mysql_real_connect()。
- 发出 SQL 语句并处理其结果。有关如何执行此操作的详细信息
- 通过调用 mysql_close() 关闭与 MySQL 服务器的连接。
- 通过调用 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