1.新建一个控制台项目
参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客
2.安装MySQL
参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客
3.复制MySQL库文件到项目文件中
在MySQL的安装文件夹下看到 include 文件夹和 lib 文件夹。将 include 文件夹和 lib 文件夹以及其内的文件全部复制到项目文件夹中(demo.cpp同文件夹下),将lib 文件夹下的libmysql.dll文件复制一份到项目文件夹中(demo.cpp同文件夹下)。
其中,include 文件夹下存放的是头文件(方法的声明),lib 文件夹下存放的是动静态库(方法的实现,打包成库)。
4.新建一个"stdbool.h"文件,内容如下,将该文件复制到项目文件夹中
本步骤目的是解决vs编译出错:fatalerrorc1083:无法打开包括文件:“stdbool.h”:nosuchfileordirectory(代码片段)。
"stdbool.h"文件内容如下:
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef __STDBOOL_H__
#define __STDBOOL_H__
#define bool int
#define true 1
#define false 0
#endif
/* __STDBOOL_H__ */
"stdbool.h"文件放于项目文件夹中的include 文件夹下。
5.进行调用库的配置
注意,下述所有配置,需要先选择与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库的位数不匹配。
可以更改项目属性,项目属性要改两个地方(注意同步修改对应平台下的 库配置):
(1)项目属性-->【配置属性】-->【VC++目录】-->【包含目录】:选择mysql库中头文件所在目录
项目文件夹include文件夹
或
C:\Program Files\MySQL\MySQL Server 8.0\include
(2)项目属性-->【配置属性】-->【VC++目录】-->【库目录】:选择mysql库中静态库所在目录
项目文件夹lib文件夹
或
C:\Program Files\MySQL\MySQL Server 8.0\lib
(3)项目属性-->【配置属性】-->【链接器】-->【输入】-->【附加依赖项】
添加libmysql.lib。
6.示例代码1-检验MySQL库配置和调用是否成功
将下述代码覆盖demo.cpp中的内容。
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
int main()
{
MYSQL*mysql=mysql_init(0);
system("pause");
return 0;
}
上述代码编译成功,说明配置成功。运行成功,说明MySQL库调用成功。
7.示例代码2-获取MySQL客户端版本
将下述代码覆盖demo.cpp中的内容。
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
int main()
{
//获取客户端的版本信息
printf("mysql client version:%s\n", mysql_get_client_info());
system("pause");
return 0;
}
8.示例代码3-查询orderitems表中的数据并进行打印输出
这个示例需要的前置条件比较多:1.一个数据库;2.数据库中有表;3.表中有数据;4.具有读写数据库权限的用户等。
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
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 语言接口的内容,读者请自行拓展学习。