当前位置:   article > 正文

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

mysql c++ 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

注意:

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());
  • 1
  • 2

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 基本函数参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/582726
推荐阅读
相关标签
  

闽ICP备14008679号