• 原来,C语言操作Mysql这么简单


    d82414117cd3fac5abfdcc9620dde11b.png

    迷途小书童

    读完需要

    10

    分钟

    速读仅需 4 分钟

    1

       

    简介

    MySQL 是一种流行的关系型数据库管理系统,而 C 语言是一种强大的编程语言,可以与 MySQL 进行交互。本篇博文将介绍如何使用 C 语言来连接、查询和操作 MySQL 数据库。我们将涵盖原理实现、安装步骤、使用示例和代码解析,帮助您快速上手使用 C 语言操作 MySQL 数据库。

    2

       

    原理实现

    C 语言操作 MySQL 数据库的原理是通过 MySQL 提供的 C API(Application Programming Interface)来实现。C API 是一组函数和数据结构,允许开发人员使用 C 语言与 MySQL 进行通信。通过这些函数,我们可以连接到 MySQL 服务器,执行 SQL 操作语句,并处理返回的结果。

    3

       

    安装步骤

    在开始之前,您需要确保已经安装了 MySQL 数据库和相应的 C 语言开发环境。以下是安装步骤的概述

    • 安装 MySQL 数据库:根据您的操作系统,下载并安装适用于您的 MySQL 数据库版本

    • 安装 MySQL Connector/C:MySQL Connector/C 是 MySQL 提供的用于 C 语言的官方驱动程序

    • 配置编译器:确保您的 C 语言编译器已正确配置,并能够链接 MySQL Connector/C 库

    对应到 ubuntu 系统中,命令是

    sudo apt install mysql-server mysql-workbench libmysqlclient-dev build-essential

    4

       

    增删改查操作

    基本的注释都写在了代码里了,应该都很容易看懂,主要是几个重要的 API 的调用。

    首先创建数据库 db 并建一张表, 表结构如下

    aa51135202e32f1ba30d9adca1adf673.png

    看看代码

    1. #include h>
    2. #include h>
    3. #include h>
    4. #include h>
    5. #define MYSQL_HOST "localhost"
    6. #define MYSQL_USER "root"
    7. #define MYSQL_PASSWD "toor"
    8. #define DB_NAME "db"
    9. #define TABLE_NAME "students"
    10. /*
    11. * 测试的数据表结构很简单, number, grade, sex, score 四个字段, 代表学号、年级、性别、分数
    12. */
    13. /* 连接mysql */
    14. void mysqldb_connect(MYSQL *mysql)
    15. {
    16. if(!mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, DB_NAME, 0, NULL, 0)) {
    17. printf("\nFailed to connect:%s\n", mysql_error(mysql));
    18. } else {
    19. printf("\nConnect sucessfully!\n");
    20. }
    21. }
    22. /* 插入数据 */
    23. void mysqldb_insert(MYSQL *mysql, int number, int grade, char *sex, int score)
    24. {
    25. int t;
    26. char *head = "INSERT INTO ";
    27. char query[120];
    28. char field[48] = "number, grade, sex, score";
    29. char *left = "(";
    30. char *right = ") ";
    31. char *values = "VALUES";
    32. char message[100] = {0};
    33. sprintf(message, "%d, %d, \"%s\", %d", number, grade, sex, score);
    34. /* 拼接sql命令 */
    35. sprintf(query, "%s%s%s%s%s%s%s%s%s", head, TABLE_NAME, left, field, right, values, left, message, right);
    36. printf("%s\n", query);
    37. t = mysql_real_query(mysql, query, strlen(query));
    38. if (t) {
    39. printf("Failed to query: %s\n", mysql_error(mysql));
    40. }
    41. else {
    42. printf("\nInsert sucessfully!\n");
    43. }
    44. }
    45. /* 删除数据 */
    46. void mysqldb_delete(MYSQL *mysql, char *field_name, int number)
    47. {
    48. int t;
    49. char *head = "DELETE FROM ";
    50. char query[120];
    51. sprintf(query, "%s%s where %s =%d", head, TABLE_NAME, field_name, number);
    52. printf("%s\n", query);
    53. t = mysql_real_query(mysql, query, strlen(query));
    54. if (t) {
    55. printf("\nFailed to query: %s\n", mysql_error(mysql));
    56. } else {
    57. printf("\nDelete data sucessfully!\n");
    58. }
    59. }
    60. /* 更新数据 */
    61. void mysqldb_update(MYSQL *mysql, char *field_name, int score)
    62. {
    63. int t;
    64. char *head = "UPDATE ";
    65. char query[100];
    66. sprintf(query, "%s%s SET %s=%d", head, TABLE_NAME, field_name, score);
    67. printf("%s\n", query);
    68. t = mysql_real_query(mysql, query, strlen(query));
    69. if (t) {
    70. printf("Failed to update: %s\n", mysql_error(mysql));
    71. return;
    72. }
    73. printf("\nUpdate data sucessfully!\n");
    74. }
    75. /* 查询数据 */
    76. void mysqldb_query(MYSQL *mysql)
    77. {
    78. int t;
    79. char *head = "SELECT * FROM ";
    80. char query[50] = {0};
    81. MYSQL_RES *res;
    82. MYSQL_ROW row;
    83. sprintf(query, "%s%s", head, TABLE_NAME);
    84. t = mysql_real_query(mysql, query, strlen(query));
    85. if (t) {
    86. printf("Failed to query: %s\n", mysql_error(mysql));
    87. return;
    88. } else {
    89. printf("\nQuery successfully!\n");
    90. }
    91. res = mysql_store_result(mysql);
    92. while (row = mysql_fetch_row(res)) {
    93. for(t = 0; t < mysql_num_fields(res); t++) {
    94. printf("%s\t", row[t]);
    95. }
    96. printf("\n");
    97. }
    98. mysql_free_result(res);
    99. }
    100. /* 断开mysql连接 */
    101. void close_connection(MYSQL *mysql)
    102. {
    103. mysql_close(mysql);
    104. }
    105. int main(int argc, char *argv[])
    106. {
    107. // 准备一组数据
    108. int number = 1;
    109. int grade = 1;
    110. char sex[] = "male";
    111. int score = 100;
    112. // 初始化mysql
    113. MYSQL *mysql = mysql_init(NULL);
    114. if (!mysql) {
    115. printf("\nMysql init failed.\n");
    116. }
    117. // 连接MYSQL
    118. mysqldb_connect(mysql);
    119. // 插入数据
    120. mysqldb_insert(mysql, number, grade, sex, score);
    121. // 更新数据
    122. mysqldb_update(mysql, "score", 99);
    123. // 查询数据
    124. mysqldb_query(mysql);
    125. // 删除数据
    126. mysqldb_delete(mysql, "number", number);
    127. // 断开连接
    128. close_connection(mysql);
    129. return 0;
    130. }

    四个操作,在执行前面的操作时,后面暂未执行的可以先注释掉,然后一步步查看结果,看是否和预期的一致。

    5

       

    编译

    使用 gcc 进行编译,命令如下

    gcc -o mysql_in_c mysql_in_c.c -lmysqlclient

    生成可执行文件 mysql_in_c

    6

       

    执行结果

    增加一条记录

    f99206fa93313e425790f2e99f361290.png

    更改一条记录

    507ecfdd143e4e714272b1a7588c4059.png

    查询记录

    9b56954b98f5a6961f960fbf746c8902.png

    删除记录

    ab681a53b4c4497c2537e7f4df04e54c.png

    7

       

    参考资料

    1. https://github.com/mysql

    8

       

    免费社群

    a269c87bf91a39062bf835a033e3eca0.jpeg

    ae2e52c274b0be11607adfa29cba4abf.gif

  • 相关阅读:
    Qt SQL:QSqlRelation、QSqlRelationalTableModel、QSqlRelationalDelegate
    学习大数据必须掌握哪些核心技术?
    vue中ref的用法
    Electron是什么以及可以做什么
    计算机毕业设计Java的工资管理系统(源码+系统+mysql数据库+lw文档)
    linux内存概念理解
    Python学习 - 垃圾回收、特殊方法和模块
    史上最全Java面试题,Java面试必备
    数藏向左,NFT向右
    企业在知乎上做问答推广的技巧分析,企业知乎推广营销方法步骤
  • 原文地址:https://blog.csdn.net/djstavaV/article/details/133191611