115-Linux_C语言访问mysql及操作数据库

news2024/11/17 19:36:42

文章目录

  • 一.C语言访问mysql
    • 1.连接数据库使用的头文件和库文件
    • 2.初始化连接句柄
    • 3.连接数据库
    • 4.关闭连接
    • 5.执行sql语句
    • 6.提取结果
    • 7.获取结果集中有多少行
    • 8.取出结果集中的一行记录
    • 9.查看记录行的列数
    • 10.释放结果集占用的内存
    • 11.获取错误信息
  • 二.连接数据库
  • 三.操作数据库

一.C语言访问mysql

1.连接数据库使用的头文件和库文件

#include <mysql/mysql.h>
有些也在 #include <mysql.h>
程序中使用了访问mysql的有关函数接口,需要在链接时指定库名: linux平台为 -lmysqlclient

2.初始化连接句柄

MYSQL *mysql_init(MYSQL *mysql);
该方法用来初始化一个连接句柄,如果参数为空,则返回一个指向新分配的连接句柄的指针。如果传递一个已有的结构,它将被重新初始化。出错时返回为NULL。

3.连接数据库

MYSQL *mysql_real_connect(MYSQL *mysql,
 const char *host,const char *user, const char *passwd,const char *db, 
 unsigned int port,const char *unix_socket,unsigned long clientflag);
参数介绍,其中
mysql是上一步mysql_init方法初始化后返回的指针,
host是主机名,或者连接的服务器IP地址,本地可以使用"localhost",或"127.0.0.1""",或
NULL
user是用户名,数据库中添加的用户,管理员是"root"passwd 是用户的密码,
db 是数据库的名字,
port 是数据库的端口 3306,也可直接写0,意味着使用mysql默认端口,
unix_socket 一般为NULL,表示不使用unix套接字或者管道
clientflag 标志位,一般给0
返回值,失败为NULL,成功与第一个参数值相同。

4.关闭连接

void mysql_close(MYSQL *mysql);
在不使用时,可以用该方法关闭连接。

5.执行sql语句

int mysql_query(MYSQL *mysql, const char *q);
参数: mysql 是之前连接后返回的指针,
q 是要执行的sql语句,末尾可以没有分号,这个在命令工具中使用不同。
返回值:成功返回0。
注意:如果sql语句中有二进制数据,则应该使用mysql_real_query()

6.提取结果

MYSQL_RES *mysql_store_result(MYSQL *mysql); 一次性提取所有数据
//MYSQL_RES *mysql_use_result(MYSQL *mysql);一次提取一行数据
该方法,是在执行 mysql_query()成功之后调用的,可以立刻保存在客户端中收到的所有数据。它返回一个
指向结果集结构的指针。如果失败返回NULL;

7.获取结果集中有多少行

uint64_t mysql_num_rows(MYSQL_RES *res);
只有执行了 mysql_store_result()之后,才可以调用该方法,获取结果集中的行数。如果没有返回行,则
为0;

8.取出结果集中的一行记录

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
从结果集中取出一行,并把它存放到一个行结构中。当数据用完或者出错时,返回为NULL,通常该方法需要循
环调用。

9.查看记录行的列数

unsigned int mysql_field_count(MYSQL *mysql);

10.释放结果集占用的内存

void mysql_free_result(MYSQL_RES *result);
执行完sql语句,得到返回的结果集,处理完数据后,需要调用该方法释放存放结果集的内存空间。

11.获取错误信息

unsigned int mysql_errno(MYSQL *mysql); 返回错误码
const char *mysql_error(MYSQL *mysql); 返回错误信息描述

二.连接数据库

#include<stdio.h>
#include<mysql/mysql.h>

void func()
{
    MYSQL connect;//mysql连接对象
    mysql_init(&connect);

    //连接mysql
    if(mysql_real_connect(&connect,"localhost","root","123456","c220",0,NULL,0))
    {
        printf("连接数据库成功\n");
    }
    else
    {
        printf("error:%s\n",mysql_error(&connect));
        printf("连接失败\n");
    }

    //关闭连接
    mysql_close(&connect);
}

int main()
{
    func();
}

三.操作数据库

#include<stdio.h>
#include<mysql/mysql.h>

int main()
{
    MYSQL c;
    MYSQL *mysql=mysql_init(&c);
    if(mysql_init(&c)==NULL)
    {
        printf("mysql_init error\n");
    }

    if(mysql_real_connect(&c,"localhost","root","123456","c220",0,NULL,0))
    {
        printf("connect success!\n");
    }
    else
    {
        printf("error:%s\n",mysql_error(&c));
        printf("connect fail!\n");
    }
    
    //char * sql="insert into student values(5,'孙权',18)";
    //char *sql="update student set age=25 where id=3";
    //char * sql="delete from student where id=5";
    char  *sql="select * from student";
    int query_res=mysql_query(&c,sql);
    if(query_res!=0)
    {
        printf("query error:%s\n",mysql_error(&c));
        return 0;
    }

    MYSQL_RES * mysql_res=mysql_store_result(mysql);//获取结果集,动态分配空间
    if(mysql_res==NULL)
    {
        printf("error:%s\n",mysql_error(&c));
        printf("mysql store result error\n");
        mysql_close(&c);
        return 0;
    }

    int row=mysql_num_rows(mysql_res);//获取结果有多少行
    printf("row:%d\n",row);
    
    int col=mysql_field_count(mysql);//获取结果有多少列
    printf("col:%d\n",col);

    for(int i=0;i<row;i++)//提取行记录
    {
        MYSQL_ROW r=mysql_fetch_row(mysql_res);
        for(int j=0;j<col;j++)//提取列记录
        {
            printf("%s ",r[j]);
        }
        printf("\n");
    }

    mysql_free_result(mysql_res);//释放结果集占用的空间


    mysql_close(&c);
    exit(0);
}

以下是每次操作后的截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 中实现 ssh 免密登录

Linux 中实现 ssh 免密登录 1. 使用命令行 在控制端使用命令生成私钥密钥对&#xff0c;执行命令 ssh-keygen -t rsa ,一路默认回车即可&#xff0c;然后会在 .ssh/ 目录下生成两个文件 id_rsa 和 id_rsa.pub&#xff0c;如下图。 使用命令 ssh-copy-id root192.168.16.4&…

电力NLP:指令票规范识别

文章目录 任务目的想法讲解数据集介绍1电气主语2操作任务判断数据集3操作内容判断数据集4错误词数据集 解法讲解程序、数据集下载链接 任务目的 识别调度指令票&#xff08;或者其它操作票&#xff09;是否规范。 想法讲解 按石第2014—16号定值单投入石双西线161开关6区保护…

web三大作用域+servlet生命周期

Web三大作用域 Application ServlectContext &#xff1a; 作用于整个web应用&#xff0c;随程序的停止而失效。 使用&#xff1a; request.getServletContext().setAttribute("参数名","参数值");//servlet获取Application对象并传入数据 Application.g…

React antd 日期选择控件踩坑 <DatePicker> Table Ant Design ProTable

背景 需求&#xff1a;一个带日期的字段 后端接口给值时默认设置为这个日期值 不给值时就是默认状态 <DatePicker defaultValue{val} onChange{handleChange} {...props} />这里 val 是我最终从后端获取到的日期数据 可能有值可能没有值 按照官方 API 和 demo 写 应…

实验四 微程序控制器实验报告

我班算是几乎最后一个做实验的班级了&#xff0c;报告参考了一些朋友提供的数据加上一些自己的主观拙见&#xff0c;本人水平有限加之制作仓促难免有错误&#xff0c;望大家批评指正。 4.1 微程序控制器实验 一、实验目的 (1) 掌握微程序控制器的组成原理。 (2) 掌握微程…

springboot实习管理系统的设计与实现

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而实…

一键免费部署你的私人 ChatGPT 网页应用-ChatGPT Next Web

ChatGPT-Next-Web是一款基于GPT-3.5的在线聊天机器人应用程序。它可以自动回复用户输入的消息&#xff0c;并提供有用的信息和服务。该应用程序使用了最先进的自然语言处理技术和GPT-3.5模型&#xff0c;可以生成自然流畅的文本&#xff0c;并提供准确和个性化的回复。 项目地…

(浙大陈越版)数据结构 第二章 线性结构 2.3 队列

目录 2.3.1 队列及顺序存储实现 什么是队列 概念&#xff1a; 特性&#xff1a; 队列的抽象数据类型描述 队列的顺序存储实现 解决方案&#xff1a; 2.3.2 队列的链式存储实现 2.3.1 队列及顺序存储实现 什么是队列 概念&#xff1a; 和堆栈一样&#xff0c;是一种受…

黑马点评项目导入

文章目录 开篇导读项目地址导入SQL项目架构介绍后端项目导入前端项目导入 开篇导读 亲爱的小伙伴们大家好&#xff0c;马上咱们就开始实战篇的内容了&#xff0c;相信通过本章的学习&#xff0c;小伙伴们就能理解各种redis的使用啦&#xff0c;接下来咱们来一起看看实战篇我们…

刚刚!BingChat全面开放,人人可用!

大家好&#xff0c;我是鸟哥。 如题&#xff0c;微软真是下血本。昨天毫无征兆的宣布BingChat全面开放&#xff0c;人人可用&#xff01;众所周知ChatGPT得使用门槛有多高&#xff0c;而BingChat底层调用的是GPT4.0的模型&#xff0c;这无疑是白嫖GPT4.0最简单的姿势了。鸟哥一…

阿里云服务器镜像怎么选?操作系统版本选择说明

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云百科来详细说下阿里云服务器操作系统有哪些&#xf…

【移动端网页布局】flex 弹性布局 ④ ( 设置子元素是否换行 | flex-wrap 样式说明 | 代码示例 )

文章目录 一、设置子元素是否换行 : flex-wrap 样式说明1、flex-wrap 样式引入2、flex-wrap 样式取值说明 二、代码示例1、代码示例 : 默认情况下 flex 弹性布局子元素不会自动换行2、代码示例 : 自动换行 一、设置子元素是否换行 : flex-wrap 样式说明 1、flex-wrap 样式引入 …

统计字符串字符出现的次数

输入一个字符串&#xff0c;输出字符及相应字符出现的次数。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a;https://lqp…

navicat连接云服务器mysql教程

包含navicat报错解决&#xff01; 文章目录 1 点击连接后填写相关内容2 报错解决2.1 1130 - Host XXX is not allowed to connect to this MySQL server。2.2 服务器未开启mysql端口通道 1 点击连接后填写相关内容 主机名或ip地址&#xff1a;填写服务器公网ip 用户名和密码&a…

GitHub使用(1):杂项

目录 1. ubuntu推送到github鉴权失败2. 分支重命名3. 指令升级删除分支推送到远程仓库 1. ubuntu推送到github鉴权失败 翻译下就是 remote&#xff1a;2021 年 8 月 13 日删除了对密码身份验证的支持。 远程&#xff1a;有关当前推荐的身份验证模式的信息&#xff0c;请参阅 ht…

开会记录【NiFi数据集成、AllData数据中台管理系统、RuoYi】

今天上午和下午开了个小会&#xff0c;上午说了一下Nifi&#xff0c;下午具体说了一下nifi和ruoyi。 目录 上午 下午 上午 三个人开会。 上次说的挖掘平台&#xff0c;您这边是否有技术人员对nifi比较熟悉&#xff0c;并且能够将相关功能集成到数据中台系统中。 现在结构化的…

LeetCode---回溯算法中的子集问题

78. 子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2]…

浅谈“孔乙己”的长衫

书中的孔乙己 孔乙已是鲁迅笔下人物&#xff0c;穷困流倒还穿着象征读书人的长衫&#xff0c;迁腐、麻木。最近&#xff0c;大家自我调佩是“当代孔乙己”&#xff0c;学历成为思想负担&#xff0c;找工作时高不成低不就。 当代的“孔乙己” 如今社会&#xff0c;从小学开始每…

【DP】学习之背包问题

01背包 2. 01背包问题 - AcWing题库 记忆化搜索 #include<bits/stdc.h> using namespace std; const int N1e310; int n,m; int v[N],w[N]; int res; int mem[N][N]; int dfs(int x,int spv) {if(mem[x][spv]) return mem[x][spv];if(x>n) return mem[x][spv]0;if…

国内免费使用gpt-4-如何接入ChatGPT4

如何用上gpt-4 GPT-4尚未正式发布和公开&#xff0c;因此我们无法提供对GPT-4的具体使用方法。但是&#xff0c;可以从GPT-4的前一代——GPT-3的使用经验和GPT-4的预期功能来看&#xff0c;建议如下&#xff1a; 了解GPT-4的语言处理能力和适用场景&#xff1a;GPT-4预计将进一…