• C语言连接MySQL并执行SQL语句(hello world)


    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"文件内容如下:

    1. /*
    2. * ISO C Standard: 7.16 Boolean type and values
    3. */
    4. #ifndef __STDBOOL_H__
    5. #define __STDBOOL_H__
    6. #define bool int
    7. #define true 1
    8. #define false 0
    9. #endif
    10. /* __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中的内容。

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. MYSQL*mysql=mysql_init(0);
    7. system("pause");
    8. return 0;
    9. }

    上述代码编译成功,说明配置成功。运行成功,说明MySQL库调用成功。

     

    7.示例代码2-获取MySQL客户端版本

    将下述代码覆盖demo.cpp中的内容。

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. //获取客户端的版本信息
    7. printf("mysql client version:%s\n", mysql_get_client_info());
    8. system("pause");
    9. return 0;
    10. }

    8.示例代码3-查询orderitems表中的数据并进行打印输出

    这个示例需要的前置条件比较多:1.一个数据库;2.数据库中有表;3.表中有数据;4.具有读写数据库权限的用户等。

    1. #include
    2. #include
    3. #include
    4. const char host[] = "127.0.0.1"; // MySQL所在机器的ip
    5. const int port = 0; // MySQL所在机器的端口
    6. const char db[] = "test"; // 数据库名
    7. const char user[] = "root"; // 用户名
    8. const char passwd[] = "test123"; // 用户密码
    9. int main()
    10. {
    11. //1、获取MySQL实例(相当于创建了一个MySQL句柄)
    12. MYSQL* ms = mysql_init(nullptr);
    13. //2、连接数据库
    14. if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {
    15. printf("数据库连接失败!\n");
    16. return 1;
    17. }
    18. printf("数据库连接成功!\n");
    19. mysql_set_character_set(ms, "utf8"); //设置编码格式为utf8
    20. //3、查询数据库表中的记录
    21. //a、执行查询语句
    22. char sql[] = "select * from orderitems;";
    23. if(mysql_query(ms, sql) != 0) {
    24. printf("查询数据失败!\n");
    25. return 2;
    26. }
    27. printf("查询数据成功!\n");
    28. //b、获取查询结果
    29. MYSQL_RES* res = mysql_store_result(ms);
    30. int rows = mysql_num_rows(res); //行数
    31. int cols = mysql_num_fields(res); //列数
    32. //获取每列的属性并打印列名
    33. MYSQL_FIELD* fields = mysql_fetch_fields(res);
    34. for(int i = 0;i < cols;i++) printf("%s\t", fields[i].name);
    35. printf("\n");
    36. for(int i = 0;i < rows;i++) {
    37. //获取一行数据并进行打印
    38. MYSQL_ROW row = mysql_fetch_row(res);
    39. for(int j = 0;j < cols;j++) {
    40. printf("%s\t", row[j]);
    41. }
    42. printf("\n");
    43. }
    44. mysql_free_result(res); // 释放内存空间
    45. //4、关闭数据库
    46. mysql_close(ms);
    47. printf("数据库关闭成功!\n");
    48. return 0;
    49. }

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

  • 相关阅读:
    [每日两题系列]刷算法题咯~~
    mac上配置maven
    【苹果iMessage家庭推群发】Notification Service Extension 来修改推送通知内容的技术
    【重温设计模式】迭代器模式及其Java示例
    Spring Data JPA 之 多数据源配置
    智能机器人无法智能对话_关于智能语音机器人使用中可能出现的问题
    一次基于Fastjson的JNDI注入
    python实现五子棋游戏(pygame版)(附零基础学习资料)
    用公众号给女朋友推送早安问候(恋爱值+++++)
    XML外部实体漏洞 (XXE)简介
  • 原文地址:https://blog.csdn.net/xijinno1/article/details/133238180