Linux应用编程下连接本地数据库进行增删改查系列操作
文章目录
- 前言
- 一、常用SQL操作语句
- 二、相关函数解析
- 三、连接本地数据库
- 四、编译运行
- 五、程序源码
前言
本篇为C语言应用编程下连接Linux本地数据库进行增删改查系列操作。
在此之前,首先当然是你需要具备一定的数据库基础,所以下面我先列出部分常用的SQL操作语句,其次再介绍一些必备的数据库操作函数以供大家参考学习。
一、常用SQL操作语句
-
- 连接数据库
mysql -u root -p
-
- 查看数据库列表
show databases
-
- 创建数据库
create database 数据库名称;
-
- 删除数据库
drop database 数据库名称;
-
- 查看当前数据库下所有数据表
show tables;
-
- 进入到某个数据库内
use 数据库名称;
-
- 创建表(以"student"为例)
DROP TABLE IF EXISTS 'student'; //如果表存在就移除,因为不能存在两个一样名称的表
CREATE TABLE student(id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25) UNIQUE,email VARCHAR(25) NOT NULL,age INT DEFAULT 18);
-
- 删除表
DROP TABLE 表名;
-
- 修改表中数据
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE [条件]
-
- 向表中插入数据
INSERT INTO 表名 (列1,列2,...) VALUE (值1,值2,...);
-
- 删除表中数据
DELETE FROM 表名 WHERE [条件]
-
- 查询表中所有数据
select * from 表名;
二、相关函数解析
1. 初始化函数
MYSQL *mysql_init(MYSQL *mysql);
参数:mysql 为待初始化的MYSQ对象,将对象地址传入,NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。
2. 数据库连接函数
MYSQL *mysql_real_connect (MYSQL *mysql,const char*host,const char*user,const char*passwd,const char*db,unsigned port,const char*unix_socket,unsigned long client_flag);
参数:
mysql: 前面一个函数的返回的MySQL实例句柄。
host: 要连接的数据库的主机,可以是ip地址或主机名。
user: 表示登录数据库的用户名。
passwd: 登录的密码。
db: 就是访问的数据库。
port: MySQL的tcp/ip端口默认是3306。
unix_socket: 表示连接类型。
client_flag: 暂时为0即可。
如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
3. 查询函数
int mysql_query(MYSQL *mysql,const char *query);
参数:
mysql: MySQL的实例句柄。
query: 查询语句字符串
返回值: 成功返回0,失败返回非0
返回一个结果表,假定查询成功,可以调用 mysql_num_rows() 来查看对应于 SELECT 语句返回了多少行,或者调用mysql_affected_rows() 来查看对应于 DELETE,INSERT,REPLACE 或 UPDATE 语句影响到了多少行。
4. 上一次查询语句字符串的SQL查询的结果集
MYSQL_RES *mysql_store_result(MYSQL *mysql);
参数:
mysql: MySQL的实例句柄。
query: 查询语句字符串。
返回值:成功返回MYSQL_RES结构体,该结构体中保存查询的结果。
检索完整的结果集至客户端。客户端处理结果集最常用的方式是通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。
对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。
对于其他查询,不需要调用mysql_store_result()或mysql_use_result(),
但是如果在任何情况下均调用了mysql_store_result(),它也不会导致任何伤害或性能降低。
5. 返回结果集中的行数
int mysql_num_rows(MYSQL_RES* result);
参数:
result: 结果集
6. 返回结果集中的列数
int mysql_num_fields(MYSQL_RES* result);
参数:
result: 结果集
7. 获取下一个列的类型
MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);
参数:
result: 结果集
获取下一个列的类型,结束返回NULL。
8. 从结果集中获取下一行
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
参数:
result: 结果集
成功返回一个数组,值大于0。
9. 获取对应列的类型
MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i);
参数:
result: 结果集
i: 给定列编号
返回列的类型,结束返回NULL。
10. 关闭数据库函数
MYSQL *mysql_close(MYSQL *mysql);
参数:
mysql: MySQL的实例句柄。
11. 释放结果集函数
mysql_free_result(result);
参数:
result: 结果集
12. 防止内存泄漏函数
mysql_library_end();
三、连接本地数据库
① 创造一个MYSQL句柄
MYSQL *conn_prt;
② 初始化MYSQL句柄
conn_prt = mysql_init(NULL);
③ 尝试与mysql数据库连接
mysql_real_connect(conn_prt,"localhost","root","123456","test",0,NULL,0);
④ 获取并打印 student表 数据
void student_get_all(MYSQL *conn_prt) //获取并打印 student表 数据
{MYSQL_RES* result;MYSQL_ROW row;char buf[100];sprintf(buf, "SELECT * FROM student;");mysql_query(conn_prt, buf);result = mysql_store_result(conn_prt);if (result == NULL){//结果为空mysql_free_result(result);printf("null\n");return;}int r = mysql_num_rows(result); //行 int c = mysql_num_fields(result); //列 //printf("%d %d\n", r, c);printf("%s\n",buf);for (int i = 0; i < r; ++i){row = mysql_fetch_row(result);for (int j = 0; j < c; ++j){if (row[j] == NULL) printf("null");else printf("%s ", row[j]);}printf("\n");}mysql_free_result(result); //释放为mysql_store_result,mysql_use_result分配的结果集内存
}
⑤ 关闭与Mysql数据库的连接,并释放相应内存
mysql_close(conn_prt); //关闭连接,释放对象的内存空间
mysql_library_end(); //如果不调用该函数,可能造成内存泄露
四、编译运行
gcc -o mysql mysql.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
sudo ./mysql
五、程序源码
若需程序源码可留言邮箱至评论区或直接私信 即可。
相关文章:

Linux应用编程下连接本地数据库进行增删改查系列操作
文章目录前言一、常用SQL操作语句二、相关函数解析三、连接本地数据库四、编译运行五、程序源码前言 本篇为C语言应用编程下连接Linux本地数据库进行增删改查系列操作。 在此之前,首先当然是你需要具备一定的数据库基础,所以下面我先列出部分常用的SQL…...

图论学习03
图神经网络模型介绍 将图神经网络分为基于谱域上的模型和基于空域上的模型,并按照发展顺序详解每个类别中的重要模型。 基于谱域的图神经网络 谱域上的图卷积在图学习迈向深度学习的发展历程上起到了关键性的作用。三个具有代表性的谱域图神经网络 谱图卷积网络切…...
解决qt中cmake单独存放 .ui, .cpp, .h文件
设想 项目文件较多,全部放在一个目录下就像依托答辩。 希望能将头文件放入include,ui文件放入ui,源文件放入src。 为了将Qt代码和一般非Qt代码分离开,进一步地: 将Qt源文件放入qt_src,普通源文件放入sr…...

操作系统(day12)-- 基本分段存储,段页式存储
基本分段存储管理方式 不会产生内部碎片,会产生外部碎片 分段 按照程序自身的逻辑关系划分为 若干个段,每个段都有一个段名,每段从0开始编址 分段存储管理方式中一个段表项由段号(隐含)、段长、基地址 分段的段表项固…...

疯狂弹出请插入多卷集的最后一张磁盘窗口
整个人嘛了,今天插上U盘,跟tmd中了病毒一样, 屏幕疯狂弹出窗口, 提示请插入多卷集的最后一张磁盘! 点确定之后他继续弹出,点取消它也继续弹出, 关掉一个又弹出来一个,妈的&#x…...

Spark12: SparkSQL入门
一、SparkSQL Spark SQL和我们之前讲Hive的时候说的hive on spark是不一样的。hive on spark是表示把底层的mapreduce引擎替换为spark引擎。而Spark SQL是Spark自己实现的一套SQL处理引擎。Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核…...

show profile和trance分析SQL
目录 一.show profile分析SQL 二.trance分析优化器执行计划 一.show profile分析SQL Mysql从5.0.37版本开始增加了对show profiles和show profile语句的支持。show profiles能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。。 通过have_profiling参数,能够…...

[AI生成图片] 效果最好的Midjourney 的介绍和使用
Midjourney介绍: 是一个文本生成图片的扩散模型,能够根据输入的任何文本生成令人难以置信的图像,让数十亿人在几秒钟内创造惊人的艺术。为方便用户控制和快速生成图片,打开后在页面底部输入文本内容,稍等一小会&#…...
Vue.use( ) 的核心原理
首先来思考几个问题: Vue.use是什么? vue.use() 是vue提供的一个静态方法,主要是为了注册插件,增加vue的功能。 Vue.use( plugin ) plugin只能是Object 或 Function vue.use()做了什么工作? 该js如果是对象 该对象…...

idea同时编辑多行-winmac都支持
1背景介绍 idea编辑器非常强大,其中一个功能非常优秀,很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后,可以直接多行编辑。 优点&a…...

亿级高并发电商项目-- 实战篇 --万达商城项目 十一(编写商品搜索功能、操作商品同步到ES、安装RabbitMQ与Erlang,配置监听队列与消息队列)
👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 Ǵ…...
数据结构概述和稀疏数组
数据结构和算法内容介绍 1)算法是程序的灵魂,优秀的程序可以在海量数据计算时,仍然保持高速计算 数据结构和算法概述 1)程序 数据结构算法 2)学好数据结构可以编写出更加漂亮,更加有效率的代码 3&…...

宝塔搭建实战人才求职管理系统adminm前端vue源码(三)
大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享骑士cms后台admin前端vue在本地运行打包、宝塔发布部署的方式,本期给大家分享,后台adminm移动端后台vue前端怎么在本地运行,打包,实现线上功能更新…...

服务器是干什么用的?
首先,什么是服务器?服务器是提供计算服务器和网络服务的设备。服务器和计算机由CPU、硬盘、内存、系统总线等组成。比如我们访问一个网站,点击这个网站会发出访问请求,服务器会响应服务请求,进行相应的处理,…...
C++ 之结构体与共用体
文章目录参考描述结构体使用(基本)声明初始化先创建后初始化C 11 列表初始化使用(进阶)结构数组声明(拓展)声明及创建声明及初始化匿名结构体细节外部声明与内部声明成员赋值共用体存储空间匿名共用体同化尾…...
Java基础知识汇总(良心总结)
1. 前言 本文章是对Java基础知识进行了汇总,方便大家学习。 申明:文章的内容均来自黑马程序员,博主只是将其搬到了CSDN上以共享给大家学习 2. 目录 Day01 Java学习笔记之《开章》 Day02 Java学习笔记之《运算符》 Day03 Java学习笔记之《流程…...

InnoDB之Undo log格式
1. 前言 InnoDB有两大日志模块,分别是redo log和undo log。为了避免磁盘随机写,InnoDB设计了redo log,数据写入时只写缓冲页和redo log,脏页由后台线程异步刷盘,哪怕系统崩溃也能根据redo log恢复数据。但是我们漏了一…...
一问学习StreamAPI终端操作
Java Stream管道流是用于简化集合类元素处理的java API。 在使用的过程中分为三个阶段: 将集合、数组、或行文本文件转换为java Stream管道流管道流式数据处理操作,处理管道中的每一个元素。上一个管道中的输出元素作为下一个管道的输入元素。管道流结果…...

在屎山代码中快速找到想要的代码法-锁表法(C#)
由于本人水平有限,文中有写得不对的地方请指正,本文的方法有些投机取巧,实在是没招的情况下可以酌情使用,如有侵权,请联系删除。 前几天接到一个需求,要在医嘱签署时对检验项目进行分方操作,分…...

网页设计html期末大作业
网页设计html期末大作业网页设计期末大作业-自制网站大一期末作业,外卖网站设计网页设计期末大作业-精美商城-首页框架网页设计期末大作业-自制网站 有导航栏,轮播图,按钮均可点进去,如下图所示 点我下载资源》》》》 大一期末…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...