day31 SQLITE

数据库相关函数

数据库创建

int sqlite3_open( const char *filename,  sqlite3 **ppDb);

功能:打开数据库,不存在则创建

参数:const char *filename        数据库名

           sqlite3 **ppDb                 二级指针,传出ppDb数据库的一级指针

返回值:成功返回SQLITE_OK 失败返回错误码 sqlite_errmsg()来获取错误信息

关闭数据库和错误信息

int sqlite3_close(sqlite3* ppDb) & const char * sqlite3_errmsg(sqlite3* ppDb)

int sqlite3_errcode(sqlite3 *db)

功能:关闭数据库                   参数返回值参上

功能:返回错误信息               返回值为错误信息字符串

功能:返回错误码                   返回错误码

操作数据表

int sqlite3_exec(sqlite3 *ppDb,const char *sql

,int (*callback)(void*,int,char**,char**),void*,char**errmsg)

功能:实现sql指令

参数:

sqlite3 *ppDb数据库
 const char *sql sql指令
int (*callback)(void*,int,char**,char**) 结果输出函数
void*传入输出函数的参数
char**errmsg错误信息

int (*callback)(void*,int,char**,char**) 

void *arg外部传入参数
int cols列数
char** msg_text数据文本
char** msg_header表头

要输出结果用结果输出函数,无需填NULL

返回值:参上

代码实现增删改查

#include <stdio.h>
#include <25061head.h>
int table_add(sqlite3 *pdb)
{int num;char name[18];char sex[10];double score;printf("请输入学号 姓名 性别 成绩\n");scanf(" %d %s %s %lf",&num,name,sex,&score);//添加信息char sql[128]="";sprintf(sql,"insert into stuinfo values(%d,\"%s\",\"%s\",%.2lf);",\num,name,sex,score);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("添加信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("添加信息成功\n");return 0;}
int table_delete(sqlite3 *pdb)
{int delete_num;printf("请输入删除信息的学号\n");scanf("%d",&delete_num);getchar();	char sql[128]="";sprintf(sql,"delete from stuinfo where num=%d",delete_num);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("删除信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("信息删除成功\n");return 0;
}
int table_updata(sqlite3 *pdb)
{int updata_num;char updata_msg[32]="";printf("请输入要更新信息的学号\n");scanf("%d",&updata_num);getchar();printf("请输入要更新的信息 eg: score=90 name='ttt'\n");scanf("%s",updata_msg);//updata_msg[strlen(updata_msg)+1]=' ';getchar();char sql[128]="";//printf("num=%d\n",updata_num);sprintf(sql,"update stuinfo set %s where num=%d",updata_msg,updata_num);//printf("%s\n",sql);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("更新信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("更新信息成功\n");return 0;
}
int callback(void *arg,int cols,char** msg_text,char** msg_header)
{if(*(int *)arg==0){*(int *)arg=1;for(int i=0;i<cols;i++){printf("%s\t",*(msg_header+i));}putchar(10);}for(int j=0;j<cols;j++){	printf("%s\t",*(msg_text+j));}putchar(10);return 0;
}
int table_select(sqlite3 *pdb)
{char sql[128]="";sprintf(sql,"select * from stuinfo");char *errmsg=NULL;int arg=0;if(sqlite3_exec(pdb,sql,callback,&arg,&errmsg)!=SQLITE_OK){printf("展示信息失败\n");sqlite3_free(errmsg);return -1;}
}
int main(int argc, const char *argv[])
{	//创建数据库sqlite3 *pdb=NULL;int ret=sqlite3_open("./my.db",&pdb);if(ret!=0){printf("sqlite3_open error errcode=%d errmsg=%s\n",\sqlite3_errcode(pdb),sqlite3_errmsg(pdb));return -1;}//创建数据表char *sql="create table if not exists stuinfo \(num int,name text,sex char,score double);"; char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("创建数据表失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("数据表创建成功\n");int i;while(1){   printf("1.添加信息\n");printf("2.删除信息\n");printf("3.修改信息\n");printf("4.展示信息\n");printf("输入\n");scanf("%d",&i);getchar();switch(i){case 1: table_add(pdb);break;case 2: table_delete(pdb);break;case 3: table_updata(pdb);break;case 4: table_select(pdb);break;case 0:exit(0);default: printf("输入错误 重新输入\n");}}return 0;
}

今日刷题

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

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

相关文章

嵌入式-SPI番外之按钮驱动程序的编写-Day15

目录 一、按钮简单操作回忆 二、按钮新操作实现 &#xff08;1&#xff09;按钮的点击实现灯亮/灭 ①连接电路 ②初始化板载LED和按钮 ③按钮程序的基本原理&#xff08;核心仍为0亮/1灭&#xff09; ④按钮消抖的原理 三、按钮封装的操作-点击&#xff0c;双击&#xf…

星域智链科技:用科技点亮生活,以 AI 拓展无限可能

星域智链科技&#xff08;东莞市&#xff09;有限公司简介 星域智链科技&#xff08;东莞市&#xff09;有限公司&#xff0c;理念是 让科技便利生活、丰富生活&#xff0c;专注于科技、AI领域。 全场景 GPS 定位器 —— 精准追踪&#xff0c;守护安全&#xff0c;适用于车辆…

国内代理IP在SEO行业中的应用

随着互联网的快速发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为了数字营销的重要组成部分。无论是企业还是个人站长&#xff0c;都希望通过SEO提升自己网站的排名和流量。然而&#xff0c;随着竞争的激烈&#xff0c;传统的SEO优化手段已经逐渐显现出局限性…

Linux + arm 内存屏障

ARM 硬件层的屏障指令DMB (Data Memory Barrier)&#xff1a;保证在它之前的内存访问&#xff08;符合给定域/类型&#xff09;在它之后的内存访问之前对可见性排序。常用域&#xff1a;ish&#xff08;Inner Shareable&#xff09;&#xff0c;sy&#xff08;system-wide&…

网络安全中的远程控制活动检测与防御策略

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;远程控制技术在IT领域中用于网络连接和设备操作&#xff0c;但同样被黑客利用进行非法入侵。端口占用情况是识别远程控制活动的关键因素&#xff0c;使用工具如"cports"可以监控这些端口。系统中未知…

UIGestureRecognizer 各个子类以及其作用

在 iOS 里&#xff0c;UIGestureRecognizer 是一个抽象基类&#xff0c;专门用来处理手势事件。它本身不能直接用&#xff0c;必须用它的 子类。这些子类分别对应常见的手势识别器。常见的 UIGestureRecognizer 子类及作用1. UITapGestureRecognizer作用&#xff1a;点击手势&a…

计算机网络 HTTPS 全流程

HTTPS 通信的全流程&#xff08;特别是 TLS 握手阶段&#xff09;中使用的三个随机数是保障安全性的核心设计&#xff0c;不能随意减少。每个随机数都承担着至关重要的安全职责。下面详细解释 HTTPS 全流程&#xff0c;并重点分析这三个随机数的作用和必要性&#xff1a;&#…

DL00271-基于YOLOv11的激光雷达LiDAR船舶目标检测含完整数据集

【CSDN推荐】基于YOLOv11的激光雷达&#xff08;LiDAR&#xff09;船舶目标检测——含完整数据集&#xff01;&#x1f6a2; 科研人员必看&#xff01; 高校老师、学生和研究者们&#xff0c;前沿技术来了&#xff01;本论文利用YOLOv11模型&#xff0c;结合激光雷达&#xff0…

SQL-leetcode—3374. 首字母大写 II

3374. 首字母大写 II 表&#xff1a;user_content -------------------- | Column Name | Type | -------------------- | content_id | int | | content_text| varchar | -------------------- content_id 是这张表的唯一主键。 每一行包含一个不同的 ID 以及对应的文…

告别笼统的 200 OK:一份给 API 设计者的 HTTP 状态码终极指南

文章目录写在前面问题描述核心结论与建议简要描述详细阐述1xx - 信息性响应 (Informational)2xx - 成功 (Successful)3xx - 重定向 (Redirection)4xx - 客户端错误 (Client Error)5xx - 服务器错误 (Server Error)HTTP 状态码速查表参考以及更多更详细的状态码查询写在前面 你…

从防抖节流到链表树:编程世界中的抽象优化艺术

从防抖节流到链表树&#xff1a;编程世界中的抽象优化艺术 在编程的知识体系中&#xff0c;有些概念看似毫不相关&#xff0c;却在底层逻辑上有着惊人的相似之处。防抖与节流、链表与树&#xff0c;这两组分属不同领域的概念&#xff0c;正是这种思维共性的典型代表。它们不仅展…

第三阶段数据-3:数据库脚本生成,备份与还原,分离与附加

1_生成数据库脚本&#xff08;1&#xff09;在数据库上右键选择任务&#xff08;2&#xff09;选择生成脚本&#xff08;3&#xff09;选择下一步&#xff0c;如果下次不想显示此页面&#xff0c;可勾选不再显示此页&#xff08;4&#xff09;如果导出全部数据&#xff0c;选择…

React框架超详细入门到实战项目演练【前端】【React】

React框架 1.前端展示解释 当客户端访问服务器时&#xff0c;会从服务器中下载很多静态文件到本地&#xff0c;比如css、js等前端渲染文件 下载完成之后浏览器会将这些文件组合形成前端页面渲染出来。 2.React概述 React是一个专注于构建用户界面的JavaScript库&#xff0c;…

本地部署的终极多面手:Qwen2.5-Omni-3B,视频剪、音频混、图像生、文本写全搞定

Qwen2.5-Omni-3B是什么&#xff1f; Qwen2.5-Omni-3B 是由阿里巴巴 Qwen 团队推出的一款轻量级多模态大模型&#xff0c;作为 Qwen2.5-Omni-7B 的高效优化版本&#xff0c;专为消费级硬件环境量身打造。该模型具备处理文本、音频、图像和视频等多种模态输入的能力&#xff0c;…

连续空间强化学习:策略输出的两种形态 —— 概率分布与确定性动作

在强化学习的世界里&#xff0c;智能体与环境的交互核心是 “动作选择”。当面对离散动作空间&#xff08;如围棋的落子点、游戏的按键操作&#xff09;时&#xff0c;智能体可以直接枚举或概率选择有限的动作&#xff1b;但在连续动作空间中&#xff08;如机器人关节角度、无人…

IT运维背锅权限泄露?集中式管控如何化解风险?

在企业数字化转型的浪潮中&#xff0c;IT运维团队常常被推到风口浪尖。员工离职后权限未及时回收、账号共享导致数据泄露、跨系统权限配置不一致……这些问题一旦暴露&#xff0c;IT运维往往成为“背锅侠”。权限泄露不仅威胁企业数据安全&#xff0c;还可能导致合规性风险&…

2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路

引言 2025 年 8 月 8 日&#xff0c;北京再一次成为全球瞩目的科技焦点——世界机器人大会盛大开幕。来自全球的 200 余家顶尖企业齐聚一堂&#xff0c;带来超过 1500 件展品&#xff0c;其中首发新品突破 100 款&#xff0c;涵盖了从工业制造、医疗康复到服务陪伴、特种作业的…

从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12

安装Debian 12 前面为了在windows上好开发&#xff0c;想要在windows上配置开发环境&#xff0c;以源码方式在本地部署运行&#xff0c;但经过好几天各种版本切换及配置组件库等各种操作后&#xff0c;证明windows上搭建redmine6支持的运行环境没有那么简单&#xff0c;后续有…

超长视频生成新突破!LongVie框架问世,创作不再受时长限制

超长视频生成新突破&#xff01;LongVie框架问世&#xff0c;创作不再受时长限制 文章来源&#xff1a;Poixe AI 在AI技术飞速发展的当下&#xff0c;视频生成领域取得了令人瞩目的进步&#xff0c;尤其是在短视频创作方面。然而&#xff0c;当视频时长超过一分钟时&#xff…

MongoDB 查询方法与高级查询表(Python版)

目录 一、MongoDB3步快速安装 1.1​下载安装包 1.2运行安装程序​ 1.3​验证安装​打开CMD执行&#xff1a; 1.4 基本查询操作 二、高级查询操作符表 2.1 比较操作符 2.2 逻辑操作符 2.3 元素操作符 2.4 数组操作符 三、高级查询案例 3.1 复杂条件组合 3.2 数组查…