Linux下C语言实现MySQL操作——连接、查询、插入与客户端打造

本文涉及的产品
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: Linux下C语言实现MySQL操作——连接、查询、插入与客户端打造

准备工作


数据库


创建一个数据库(我的是test),并建表(我的是example)



知识准备


https://blog.csdn.net/weixin_45525272/article/details/108015027


1.连接代码



/*************************************************************************
    > File Name: connect.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2020年08月14日 星期五 20时39分56秒
 ************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义连接时所需要的数据宏
#define HOST "127.0.0.1"    // 所连数据库的ip 127.0.0.1是本机ip
#define USER "root"         // 数据库用户
#define PASSWORD "123456"   // 该用户密码(自设)
#define DBNAME "test"       // 要操作的数据库名
int main(int argc, char* argv[])
{
    // 定义mysql指针并初始化
    MYSQL *mysql=mysql_init(NULL);
    if(mysql== NULL)
    {
        printf("init err! 数据库初始化错误!\n");
        return -1;
    }
    // 初始化成功就连接数据库
    mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
    if(mysql == NULL)
    {
        printf("connect err! 数据库连接失败! \n");
        return -1;
    }
    printf("测试成功!\n");
    // 最后关闭连接
    mysql_close(mysql);
    return 0;
}


2.查询代码



/*************************************************************************
    > File Name: connect.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2020年08月14日 星期五 20时39分56秒
 ************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义连接时所需要的数据宏
#define HOST "127.0.0.1"    // 所连数据库的ip 127.0.0.1是本机ip
#define USER "root"         // 数据库用户
#define PASSWORD "123456"   // 该用户密码(自设)
#define DBNAME "test"       // 要操作的数据库名
// 打印结果集函数
void show_result(MYSQL_RES * result)
{
  //打印表头
  unsigned int num_fields;
  unsigned int i;
    // MYSQL_FIELD 该结构包含关于字段的信息,如字段名、类型和大小
  MYSQL_FIELD *fields;
  // 返回结果集中的行数。
  num_fields = mysql_num_fields(result);
    // mysql_fetch_fields 对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
  fields = mysql_fetch_fields(result);
    // 输出结果
  for(i = 0; i < num_fields; i++)
  {
     printf("%s\t", fields[i].name);
  }
    // 这个输出是打造表的结构边框便于查看数据,准确的输出按照你的数据自行增加减去+号
  printf("\n+----+-------+\n");
  // 行数
  MYSQL_ROW row;
    num_fields = mysql_num_fields(result);//取字段个数
  while ((row = mysql_fetch_row(result)))//循环取一行
  {
     for(i = 0; i < num_fields; i++)
     {
           // 看是否为空
         printf("%s\t",  row[i] ? row[i] : "NULL");
     }
     printf("\n");
  }
}
int main(int argc, char* argv[])
{
    // 定义mysql指针并初始化
    MYSQL *mysql=mysql_init(NULL);
    if(mysql== NULL)
    {
        printf("init err! 数据库初始化错误!\n");
        return -1;
    }
    // 初始化成功就连接数据库
    mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
    if(mysql == NULL)
    {
        printf("connect err! 数据库连接失败! \n");
        return -1;
    }
    printf("数据库连接成功!\n"); 
    // 定义查询语句
    char rSql[256]={0};
    // 我的表名为example
    strcpy(rSql,"select * from example");
    // 查询指向的SQL查询
    if(mysql_query(mysql,rSql) != 0){
      printf("mysql_query err! 查询失败\n");
      exit(1);
    }
    // 取回结果集
    int i=0;
    // mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
    MYSQL_RES * result = mysql_store_result(mysql);
    MYSQL_ROW row;
    if(result != NULL){
      //需要打印结果集
      show_result(result);
    mysql_free_result(result);//释放结果集
    }
    // 最后关闭连接
    mysql_close(mysql);
    printf("数据库关闭成功!\n");
    return 0;
}


3.插入代码



/*************************************************************************
    > File Name: insert.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2020年08月14日 星期五 21时44分30秒
 ************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义连接时所需要的数据宏
#define HOST "127.0.0.1"    // 所连数据库的ip 127.0.0.1是本机ip
#define USER "root"         // 数据库用户
#define PASSWORD "123456"   // 该用户密码(自设)
#define DBNAME "test"       // 要操作的数据库名
int main(int argc, char* argv[]){
    // 定义mysql指针并初始化
    MYSQL *mysql=mysql_init(NULL);
    if(mysql== NULL)
    {
        printf("init err! 数据库初始化错误!\n");
        return -1;
    }
    // 初始化成功就连接数据库
    mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
    if(mysql == NULL)
    {
        printf("connect err! 数据库连接失败! \n");
        return -1;
    }
    printf("数据库连接成功!\n");
    // 定义查询语句
    char rSql[256]={0};
    strcpy(rSql,"insert into example values(4,'admin')");
    if(mysql_query(mysql,rSql) != 0){
      printf("mysql_query err\n");
      exit(1);
    }
    printf("数据插入成功!\n");
    // 最后关闭连接
    mysql_close(mysql);
    return 0;
}


4.客户端代码



/*************************************************************************
    > File Name: client.c
    > Author: 杨永利
    > Mail: 1795018360@qq.com 
    > Created Time: 2020年08月14日 星期五 21时49分15秒
 ************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
// 定义连接时所需要的数据宏
#define HOST "127.0.0.1"    // 所连数据库的ip 127.0.0.1是本机ip
#define USER "root"         // 数据库用户
#define PASSWORD "123456"   // 该用户密码(自设)
#define DBNAME "test"       // 要操作的数据库名
void show_result(MYSQL_RES * result,MYSQL *mysql)
{
  //打印表头
  unsigned int num_fields;
  unsigned int i;
  MYSQL_FIELD *fields;
  num_fields = mysql_num_fields(result);
  fields = mysql_fetch_fields(result);
  for(i = 0; i < num_fields; i++)
  {
     printf("%s\t", fields[i].name);
  }
  printf("\n----------------------------------------------------------\n");//华丽分割线
  MYSQL_ROW row;
    num_fields = mysql_num_fields(result);//取字段个数
  while ((row = mysql_fetch_row(result)))//循环取一行
  {
     for(i = 0; i < num_fields; i++)
     {
         printf("%s\t",  row[i] ? row[i] : "NULL");
     }
     printf("\n");
  }
  printf("\n----------------------------------------------------------\n");//华丽分割线
  //3 rows in set (0.28 sec)
  printf("%ld rows in set \n",mysql_affected_rows(mysql));//影响的数目
}
int main(int argc, char* argv[]){
        // 定义mysql指针并初始化
    MYSQL *mysql=mysql_init(NULL);
    if(mysql== NULL)
    {
        printf("init err! 数据库初始化错误!\n");
        return -1;
    }
    // 初始化成功就连接数据库
    mysql = mysql_real_connect(mysql,HOST,USER,PASSWORD,DBNAME,0,NULL,0);
    if(mysql == NULL)
    {
        printf("connect err! 数据库连接失败! \n");
        return -1;
    }
    printf("数据库连接成功!\n");
    // 客户端操作
    printf("welcome to mysql!\n");
    char rSql[1024]={0};
    printf("输入quit退出!\n");
    while(1)
    {
        // STDIN_FILENO表示标准输入
        write(STDOUT_FILENO,"yoursql>",8);
    memset(rSql,0x00,sizeof(rSql));
        // 标准输出 STDOUT_FILENO
        read(STDIN_FILENO,rSql,sizeof(rSql));//读入sql
        if(strncmp(rSql,"quit",4) == 0){
      printf("bye bye!欢迎下次使用!\n");
      break;
    }
        //执行sql
    if(mysql_query(mysql,rSql) != 0){
        printf("mysql_query err\n");
        continue;
      }
           //取回结果集
      int i=0;
      MYSQL_RES * result = mysql_store_result(mysql);
      MYSQL_ROW row;
      if(result != NULL){
        //需要打印结果集
        show_result(result,mysql);
      mysql_free_result(result);//释放结果集
      }else
        {
        //输出例如:Query OK, 1 row affected (0.16 sec)
        printf("Query OK, %ld row affected \n",mysql_affected_rows(mysql));
        //printf("%ld products updated",(long) mysql_affected_rows(&mysql));
      }
    }
    // 最后关闭连接
    mysql_close(mysql);
    return 0;
}



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10456 2
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
582 20
|
Linux
SecureCRT连接Linux时乱码问题
本文详细介绍了在使用SecureCRT连接Linux服务器时出现乱码问题的解决方法,包括设置SecureCRT字符编码、检查和配置Linux服务器字符编码、调整终端设置等。通过这些方法,您可以有效解决SecureCRT连接Linux时的乱码问题,确保正常的终端显示和操作。希望本文能帮助您在实际操作中更好地解决类似问题,提高工作效率。
1846 17
|
存储 NoSQL Linux
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
869 0
|
监控 Linux 数据处理
Linux grep技巧 结合awk查询
结合 `grep` 和 `awk`,可以实现灵活、高效的文本处理和数据分析。`grep` 用于快速过滤符合条件的行,`awk` 用于进一步处理和提取数据。这种组合使用在日志分析、数据处理和系统监控等场景中尤为常见。掌握这两者的基本用法和组合技巧,可以大大提升在 Linux 环境下的工作效率。
564 7
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
615 0
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
626 1
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
1593 0