Linux应用编程下连接本地数据库进行增删改查系列操作

news2024/11/16 8:46:30

文章目录

  • 前言
  • 一、常用SQL操作语句
  • 二、相关函数解析
  • 三、连接本地数据库
  • 四、编译运行
  • 五、程序源码


前言

本篇为C语言应用编程下连接Linux本地数据库进行增删改查系列操作。

在此之前,首先当然是你需要具备一定的数据库基础,所以下面我先列出部分常用的SQL操作语句,其次再介绍一些必备的数据库操作函数以供大家参考学习。


一、常用SQL操作语句

    1. 连接数据库
mysql -u root -p
    1. 查看数据库列表
show databases
    1. 创建数据库
create database 数据库名称;
    1. 删除数据库
drop database 数据库名称;
    1. 查看当前数据库下所有数据表
show tables;
    1. 进入到某个数据库内
use 数据库名称;
    1. 创建表(以"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
  );
    1. 删除表
DROP TABLE 表名;
    1. 修改表中数据
UPDATE 表名
SET 列1 =1,2 =2, ...
WHERE [条件]
    1. 向表中插入数据
INSERT INTO 表名 (1,列2...) VALUE (1,值2...);
    1. 删除表中数据
DELETE FROM 表名 WHERE [条件]
    1. 查询表中所有数据
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

在这里插入图片描述

五、程序源码

若需程序源码可留言邮箱至评论区或直接私信 即可。

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

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

相关文章

如何利用文件上传漏洞-以及如何修复它们

目录什么是文件上传漏洞&#xff1f;文件上传请求如何工作为什么文件上传漏洞是个问题&#xff1f;漏洞 #1&#xff1a;通过文件内容远程代码执行&#xff08;Web Shell 上传&#xff09;绕过黑名单保护案例 1&#xff1a;案例 2&#xff1a;案例 3&#xff1a;案例 4&#xff…

【Spark分布式内存计算框架——Spark SQL】10. External DataSource(上)数据源与格式

第六章 External DataSource 在SparkSQL模块&#xff0c;提供一套完成API接口&#xff0c;用于方便读写外部数据源的的数据&#xff08;从Spark 1.4版本提供&#xff09;&#xff0c;框架本身内置外部数据源&#xff1a; 在Spark 2.4版本中添加支持Image Source&#xff08;图…

音频信号处理笔记(一)

相关课程&#xff1a;【音频信号处理及深度学习教程】 文章目录01 信号的时域分析1.1 分帧1.1.1 幅值包络1.1.2 均方根能量0 信号的叠加&#xff1a;https://teropa.info/harmonics-explorer/ 一个复杂信号分解成若干简单信号分量之和。不同个频率信号的叠加: 由于和差化积&a…

【Mysql基础 —— SQL语句(一)】

文章目录概述使用启动/停止mysql服务连接mysql客户端数据模型SQLSQL语句分类DDL数据库操作表操作查询创建数据类型修改删除DML添加数据修改数据删除数据DQL基础查询条件查询聚合函数分组查询排序查询分页查询执行顺序DCL管理用户权限控制概述 数据库&#xff08;Database&#…

如何评价一个新技术——以 ChatGPT 为例

开源社KAIYUANSHE近期微信公众号订阅功能做调整啦&#xff01;没有被星标的账号在信息流里可能不显示大图了&#xff01;快星标⭐我们&#xff0c;就可以及时看到发布的文章啦&#xff01;STEP01 点击右上角标志STEP02 点击【设为星标】缘起2015 年的时候&#xff0c;我写过一篇…

DaVinci 偏好设置:用户 - UI 设置

偏好设置 - 用户/ UI 设置Preferences - User/ UI Settings工作区选项Workspace Options语言Language指定 DaVinci Resolve 软件界面所使用的语言。目前支持英语、简体中文、日语、西班牙语、葡萄牙语、法语、俄语、泰语和越南语等等。启动时重新加载上一个工作项目Reload last…

Python 连接数据源与邮件功能(九)

文章目录一、概述二、Python 连接数据源1&#xff09;Python MySQL 基础操作1、部署MySQL2、MySQL Connector 库【1】安装 mysql-connector-python 库【2】连接 MySQL【3】增加数据【4】查询数据【5】更新数据【6】删除数据2、PyMySQL 库【1】安装 PyMySQL 库【2】连接 MySQL【…

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals):SDGs 优先事项的选择

正在写&#xff0c;不断更新&#xff0c;别着急。。。 4. SDGs 优先事项的选择 4.1 基于SDG密度分布图选择优先事项 虽然每个可持续发展目标的接近度矩阵和中心性度量的结果是通用的&#xff0c;并创建了基本的可持续发展目标网络&#xff0c;但由于各国在网络的不同部分取得…

前端网格布局grid

网格布局 <style> .container {border:none;display: grid;height: 600px;grid-template-columns: 200px 1fr; /*两列&#xff0c;第一列200px&#xff0c;第二列自适应*/grid-template-rows: 50px 1fr 30px; /*三行&#xff1a;第一行&#xff1a;50px,第二行&#…

【C语言每日一题】——猜名次

【C语言每日一题】——猜名次&#x1f60e;前言&#x1f64c;猜名次&#x1f64c;解题思路分享&#xff1a;&#x1f60d;解题源码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神…

大数据之-Nifi-应用场景2-2_设置putfile处理器自动创建目标文件夹_以及存在重复文件时自动覆盖---大数据之Nifi工作笔记0006

上一节我们留了两个问题,一个是,如果我们没有创建putfile要写入的目标文件夹,会报错吗? 可以看到我们putfile目标文件夹是上面这个目录 我们来试一试,如果目标文件夹不存在,putfile处理器会自动创建吗 首先我们删除这个target目标文件夹 然后我们进入cd source目录,源文件夹目…

echart在微信小程序的使用

echart在微信小程序的使用 echarts不显示在微信小程序 <!-- 微信小程序的echart的使用 --> <view class"container"><ec-canvas id"mychart-dom-bar" canvas-id"mychart-bar" ec"{{ ec }}"></ec-canvas> &l…

SVNH数据(.mat格式)转为图像(.png)matlab代码

一、获取SVNH数据数据集集地址-http://ufldl.stanford.edu/housenumbers/提供两种格式的数据&#xff1a;1.Format 1&#xff0c;图像形式&#xff0c;压缩包2.Format 2&#xff0c; .mat格式的数据10 classes, 1 for each digit. Digit 1 has label 1, 9 has label 9 and 0 ha…

Git在日常使用过程中的常用命令

文章目录Git在日常使用过程中的常用命令写在前面1. 创建本地仓库2. 将本地文件添加到暂存区3. 将本地文件从暂存区撤销4. 将修改提交到本地仓库5. clone远程版本库到本地。6. 为本地版本库添加一个远程仓库7. 推送到远程仓库8. 将远程分支内容拉取到本地Git在日常使用过程中的常…

Docker下快速搭建RabbitMQ单例及集群

引子生命在于折腾&#xff0c;为上数据实时化用到了消息传送的内容&#xff0c;当时也和总公司人员商量选型&#xff0c;kafka不能区分分公司就暂定用了RbtMQ刚好个人也在研究容器及分布式部署相关内容就在docker上实践单机 docker&#xff08;要想快 先看问题 避免踩坑&#x…

Linux 简介

Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 …

[安装]ThinkPad X250加装固态硬盘教程

方案&#xff1a;保留原有的机械硬盘&#xff0c;再加装一个固态硬盘作为系统盘。由于X250没有光驱&#xff0c;这样就无法使用第二个2.5寸的硬盘。还好&#xff0c;X250留有一个M.2接口&#xff0c;这样&#xff0c;就可以使用NGFF M.2接口的固态硬盘。不过&#xff0c;这种接…

如何在 Python 中验证用户输入

要验证用户输入&#xff1a; 使用 while 循环进行迭代&#xff0c;直到提供的输入值有效。检查输入值在每次迭代中是否有效。如果该值有效&#xff0c;则跳出 while 循环。 # ✅ 验证用户输入的是否是整数num 0while True:try:num int(input("Enter an integer 1-10: …

python练习

项目场景一&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶…

一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例

文章目录1 Socket讲解2 基于Socket的TCP编程3 客户端Socket的工作过程包含以下四个基本的步骤3.1 客户端创建Socket对象4 服务器程序的工作过程包含以下四个基本的步骤&#xff1a;4.1 服务器建立ServerSocket对象5 案例实现 客户端和服务端通信5.1 代码实现5.2 实现结果6 更多…