参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客
参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客
在MySQL的安装文件夹下看到 include 文件夹和 lib 文件夹。将 include 文件夹和 lib 文件夹以及其内的文件全部复制到项目文件夹中(demo.cpp同文件夹下),将lib 文件夹下的libmysql.dll文件复制一份到项目文件夹中(demo.cpp同文件夹下)。
其中,include 文件夹下存放的是头文件(方法的声明),lib 文件夹下存放的是动静态库(方法的实现,打包成库)。
本步骤目的是解决vs编译出错:fatalerrorc1083:无法打开包括文件:“stdbool.h”:nosuchfileordirectory(代码片段)。
"stdbool.h"文件内容如下:
- /*
- * ISO C Standard: 7.16 Boolean type and values
- */
-
- #ifndef __STDBOOL_H__
- #define __STDBOOL_H__
- #define bool int
- #define true 1
- #define false 0
- #endif
- /* __STDBOOL_H__ */
"stdbool.h"文件放于项目文件夹中的include 文件夹下。
注意,下述所有配置,需要先选择与MySQL库对应的平台 win32 或 x64,否则会出错。
如下:
error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用 等错误的时候,是因为vs项目的位数与MySQL库的位数不匹配。
可以更改项目属性,项目属性要改两个地方(注意同步修改对应平台下的 库配置):

项目文件夹include文件夹
或
C:\Program Files\MySQL\MySQL Server 8.0\include

项目文件夹lib文件夹
或
C:\Program Files\MySQL\MySQL Server 8.0\lib

添加libmysql.lib。

将下述代码覆盖demo.cpp中的内容。
- #include
- #include
- #include
- int main()
- {
-
- MYSQL*mysql=mysql_init(0);
- system("pause");
- return 0;
- }
上述代码编译成功,说明配置成功。运行成功,说明MySQL库调用成功。
将下述代码覆盖demo.cpp中的内容。
- #include
- #include
- #include
- int main()
- {
-
- //获取客户端的版本信息
- printf("mysql client version:%s\n", mysql_get_client_info());
- system("pause");
- return 0;
- }

这个示例需要的前置条件比较多:1.一个数据库;2.数据库中有表;3.表中有数据;4.具有读写数据库权限的用户等。
- #include
- #include
- #include
-
- const char host[] = "127.0.0.1"; // MySQL所在机器的ip
- const int port = 0; // MySQL所在机器的端口
- const char db[] = "test"; // 数据库名
- const char user[] = "root"; // 用户名
- const char passwd[] = "test123"; // 用户密码
-
- int main()
- {
- //1、获取MySQL实例(相当于创建了一个MySQL句柄)
- MYSQL* ms = mysql_init(nullptr);
-
- //2、连接数据库
- if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {
- printf("数据库连接失败!\n");
- return 1;
- }
- printf("数据库连接成功!\n");
- mysql_set_character_set(ms, "utf8"); //设置编码格式为utf8
-
- //3、查询数据库表中的记录
-
- //a、执行查询语句
- char sql[] = "select * from orderitems;";
- if(mysql_query(ms, sql) != 0) {
- printf("查询数据失败!\n");
- return 2;
- }
- printf("查询数据成功!\n");
- //b、获取查询结果
- MYSQL_RES* res = mysql_store_result(ms);
- int rows = mysql_num_rows(res); //行数
- int cols = mysql_num_fields(res); //列数
- //获取每列的属性并打印列名
- MYSQL_FIELD* fields = mysql_fetch_fields(res);
- for(int i = 0;i < cols;i++) printf("%s\t", fields[i].name);
- printf("\n");
-
- for(int i = 0;i < rows;i++) {
- //获取一行数据并进行打印
- MYSQL_ROW row = mysql_fetch_row(res);
- for(int j = 0;j < cols;j++) {
- printf("%s\t", row[j]);
- }
- printf("\n");
- }
-
- mysql_free_result(res); // 释放内存空间
-
- //4、关闭数据库
- mysql_close(ms);
- printf("数据库关闭成功!\n");
- return 0;
- }

写在最后:本文仅展示了使用MySQL库的基础内容,并未介绍过多MySQL 的 C 语言接口的内容,读者请自行拓展学习。