🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、MySQL C/C++ 常用接口
1.1 mysql_init
1.2 mysql_real_connect
1.3 mysql_close
1.4 mysql_set_character_set
1.5 mysql_query
1.6 mysql_store_result
1.7 mysql_fetch_row
1.8 mysql_real_query
二、测试用例
本篇文章对 MySQL C/C++ 常用接口进行讲解,包括:连接数据库、插入、更新、查询等操作。
一、MySQL C/C++ 常用接口
1.1 mysql_init
MYSQL *mysql_init(MYSQL *mysql)
分配或初始化一个适用于 mysql_real_connect() 的 MYSQL 对象,用于连接 MySQL 服务端。如果传入 NULL,会自动分配一个 MySQL 对象。
1.2 mysql_real_connect
MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag)
尝试建立到主机上运行的 MySQL 服务器的连接。在执行任何其他需要有效 MYSQL 连接处理程序结构的 API 函数之前,客户端程序必须成功连接到服务器。
1.3 mysql_close
void mysql_close(MYSQL *mysql)
关闭先前打开的连接。 如果处理程序是由 mysql_init() 或 mysql_connect() 自动分配的,则 mysql_close() 还会释放 mysql 指向的连接处理程序。不要在处理程序关闭后使用它。
1.4 mysql_set_character_set
int mysql_set_character_set(MYSQL *mysql, const char *csname)
该函数用于设置当前连接的默认字符集。字符串 csname 指定一个有效的字符集名称。
1.5 mysql_query
int mysql_query(MYSQL *mysql, const char *stmt_str)
执行以 null 结尾的字符串 stmt_str 指向的 SQL 语句。返回 0 表示成功,否则执行出错。
1.6 mysql_store_result
MYSQL_RES *mysql_store_result(MYSQL *mysql)
在调用 mysql_real_query() 或 mysql_query() 之后,必须为每个成功生成结果集的语句(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE 等)调用 mysql_store_result() 或 mysql_use_result()。在完成结果集后,您还必须调用 mysql_free_result()。
1.7 mysql_fetch_row
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
检索结果集的下一行。当在 mysql_store_result() 或 mysql_store_result_nonblocking() 之后使用时,如果没有更多的行要检索,mysql_fetch_row() 将返回 NULL。当在 mysql_use_result() 之后使用时,如果没有更多的行可检索或发生错误,mysql_fetch_row() 将返回 NULL。
1.8 mysql_real_query
int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
执行stmt_str指向的 SQL 语句。 通常,字符串必须由单个 SQL 语句组成,不带终止分号 (;) 或 \g。 如果启用了多语句执行,则该字符串可以包含多个以分号分隔的语句。
mysql_query() 不能用于包含二进制数据的语句;你必须改用 mysql_real_query() 。(二进制数据可能包含 \0 字符,mysql_query() 将其解释为语句字符串的结尾。)此外,mysql_real_query() 比 mysql_query() 更快,因为它不在语句字符串上调用 strlen()。
二、测试用例
下面就来演示下上面的函数的使用,如下所示。
#include <iostream>
#include <mysql.h>
#include <sstream>
using namespace std;
#define HOST "127.0.0.1"
#define USER "root"
#define PASSWORD "qwer1234"
#define DATABASE "mysqltest"
#define PORT 3306
int main()
{
// 初始化 MYSQL 对象
MYSQL *conn = mysql_init(nullptr);
//连接 MySQL 数据库
if (!mysql_real_connect(conn, HOST, USER, PASSWORD, DATABASE, PORT, NULL, 0)) {
cout<<"Error connecting to database: "<<mysql_error(conn)<<endl;
exit(1);
}
// 设置字符集
if (mysql_set_character_set(conn, "gbk") != 0) {
cout<<__LINE__<<" : error : "<<mysql_error(conn)<<endl;
exit(1);
}
const char * query = "insert into student(name, height) values('test13', '193');";
int ret = mysql_query(conn, query);
if (!ret) {
cout<<"插入数据成功!"<<endl;
} else {
cout<<"Error: "<<mysql_error(conn)<<endl;
cout<<"插入数据失败!"<<endl;
}
query = "select * from student;";
ret = mysql_query(conn, query);
MYSQL_RES *retSet = mysql_store_result(conn);
MYSQL_ROW row;
while ((row = mysql_fetch_row(retSet)) != nullptr) {
cout<<"id = "<<row[0]<<" name = "<<row[1]<<" height = "<<row[2]<<endl;
}
// 关闭连接
mysql_close(conn);
return 0;
}
输出结果为:
插入数据成功!
id = 1 name = test1 height = 181
id = 2 name = test2 height = 182
id = 3 name = test3 height = 183
id = 4 name = test4 height = 184
id = 5 name = test5 height = 185
id = 6 name = test6 height = 186
id = 7 name = test7 height = 187
id = 8 name = test8 height = 188
id = 9 name = test9 height = 189
id = 10 name = test10 height = 180
id = 11 name = test11 height = 191
id = 12 name = test12 height = 192
id = 13 name = test13 height = 193
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
参考链接:
[1] MySQL :: MySQL 8.0 C API Developer Guide :: 4 C API Function Reference