sql数据库
目录
一. 数据库的概念
二. 常用的数据库
三. SQL基础
四. SQL语句的使用
一. 数据库的概念
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。
二. 常用的数据库
大型数据库 :Oracle
中型数据库 :Server是微软开发的数据库产品,主要支持windows平台
小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据)
mySQL与SQLite区别:MySQL和SQLite是两种不同的数据库管理系统,它们在多个方面有所不同。
1. 性能和规模:MySQL通常用于大型应用程序和网站,它可以处理大量数据和高并发访问。SQLite则更适合于小型应用程序或移动设备,因为它是一个轻量级的数据库引擎,不需要独立的服务器进程,可以直接访问本地文件。
2. 部署和配置:MySQL需要单独的服务器进程来运行,需要配置和管理数据库服务器。而SQLite是一个嵌入式数据库,可以直接嵌入到应用程序中,不需要单独的服务器进程。
3. 功能和特性:MySQL提供了更多的功能和高级特性,比如存储过程、触发器、复制和集群支持等。SQLite则是一个轻量级的数据库引擎,功能相对较少,但对于简单的数据存储和检索已经足够。
4. 跨平台支持:SQLite在各种操作系统上都能够运行,而MySQL需要在特定的操作系统上安装和配置数据库服务器。
总之,MySQL适用于大型应用程序和网站,需要处理大量数据和高并发访问,而SQLite适用于小型应用程序或移动设备,对性能和规模要求没有那么高。
三. SQL基础
SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。
SQLite有以下特性:
零配置一无需安装和管理配置;
储存在单一磁盘文件中的一个完整的数据库;
数据库文件可以在不同字节顺序的机器间自由共享;
支持数据库大小至2TB(1024G = 1TB);//嵌入式足够
足够小,全部源码大致3万行c代码,250KB;
比目前流行的大多数数据库对数据的操作要快;
四. SQL语句的使用
1.打开数据库
int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库,如果数据库不存在则创建它
参数:path: 数据库文件路径db: 指向sqlite句柄的指针
返回值:成功返回SQLITE_OK(0),失败返回错误码(非零值)
2.返回错误信息
char *sqlite3_errmsg(sqlite3 *db);
功能: 获取错误信息
返回值:返回错误信息
使用: fprintf(stderr,"sqlite3_open failed %s\n",sqlite3_errmsg(db));
3.关闭数据库
int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回SQLITE_OK,失败返回错误码
4.执行sql语句
int sqlite3_exec(sqlite3 *db, /* An open database */const char *sql, /* SQL to be evaluated */int (*callback)(void*,int,char**,char**), /* Callback function */void *arg, /* 1st argument to callback */char **errmsg /* Error msg written here */
);功能:执行SQL操作
参数:db:数据库句柄sql:要执行SQL语句callback:回调函数(满足一次条件,调用一次函数,用于查询)再调用查询sql语句的时候使用回调函数打印查询到的数据arg:传递给回调函数的参数errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码
回调函数:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);功能:select:每找到一条记录自动执行一次回调函数
参数:para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)f_num:记录中包含的字段数目f_value:包含每个字段值的指针数组(列值)f_name:包含每个字段名称的指针数组(列名)
返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调
不使用回调函数执行SQL语句(只用于查询)
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);功能:执行SQL操作
参数:db:数据库句柄sql:SQL语句resultp:用来指向sql执行结果的指针nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))ncolumn:每条记录包含的字段数目errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码
#include <stdio.h>
#include <sqlite3.h>int callback(void *buf, int num, char **value, char **name);int main(int argc, char const *argv[])
{sqlite3 *db;// 1.打开数据库if (sqlite3_open("./stu.db", &db) != SQLITE_OK){// 打印错误信息fprintf(stderr, "open err:%s\n", sqlite3_errmsg(db));return -1;}// 数据库的操作char *errmsg = NULL;if (sqlite3_exec(db, "create table if not exists stu(id int ,name char, score float);", NULL, NULL, &errmsg) != 0){fprintf(stderr, "create err:%s\n", errmsg);return -1;}printf("create table okk\n");// 插入数据/*if (sqlite3_exec(db, "insert into stu values(1,'huanhuan',99.99)", NULL, NULL, &errmsg) != 0){fprintf(stderr, "insert err:%s\n", errmsg);return -1;}printf("insert okk\n");*/int num;printf("请输入学生人数");scanf("%d", &num);int id;char name[32] = {0};float score;char sql[128] = {0};for (int i = 0; i < num; i++){printf("请输入学生学号 姓名 成绩:");scanf("%d %s %f", &id, name, &score);sprintf(sql, "insert into stu values(%d,'%s',%f)", id, name, score);if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0){fprintf(stderr, "insert err:%s\n", errmsg);return -1;}printf("insert okk\n");}// 查询数据/**/if (sqlite3_exec(db, "select * from stu ;", callback, "hello", &errmsg) != 0){fprintf(stderr, "select err:%s\n", errmsg);return -1;}printf("select okk\n");// 专门用于查询数据的函数:sqlite3_get_table// row:行// column:列char **result = NULL;int row = 0, column = 0;sqlite3_get_table(db, "select * from stu ;", &result, &row, &column, &errmsg);int k = 0;printf("row:%d column:%d\n",row,column);for (int i = 0; i <= row; i++){for (int j = 0; j < column; j++)printf("%s ", result[k++]);putchar(10);}// 关闭sqlite3_close(db);return 0;
}int callback(void *buf, int num, char **value, char **name)
{// 每查询到一条符合条件的数据就会调用一次函数static int i = 1;printf("%s:%d\n", (char *)buf, i++);// num:列数// value:值// name:列名for (int j = 0; j < num; j++){printf("%s ", name[j]);}putchar(10);for (int j = 0; j < num; j++){printf("%s ", value[j]);}putchar(10);printf("***************************************\n");return 0; // 必须存在,不然sqlite_exec函数会报错
}
59
相关文章:

sql数据库
目录 一. 数据库的概念 二. 常用的数据库 三. SQL基础 四. SQL语句的使用 一. 数据库的概念 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是存放数据的仓库。它的存储空…...

2024/9/19 408大题专训之五段式指令流水线题型总结
结构冒险: 指令步骤:IF(取指令) ID(译码) EX(执行、计算)M(访存)WB(写回) 其中if和m都需要访问主存取指令和数据,如何解决呢?可以把cache分成数据cache指令…...

Android SPN/PLMN 显示逻辑简介
功能描述 当设备驻网后(运营商网络),会在状态栏、锁屏界面、下拉控制中心显示运营商的名称。 此名称来源有两种: 1、SPN(Service Provider Name) 2、PLMN (Public Land Mobile Name) 功能AOSP默认逻辑SPN提供SIM卡的运营商名称预置在SIM EF中,SIM卡发行运营商名称…...

1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)
前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…...

什么是数字化转型升级?
一、什么是数字化转型升级? 数字化转型升级是一个综合性概念,涵盖多个方面的深刻变革。比如说: 技术层面 1、数据化与信息化基础建设 首先是将企业或组织内部的各类业务信息转化为数据形式。例如,传统制造业将生产过程中的设备…...

JAVA开源项目 校园美食分享平台 计算机毕业设计
本文项目编号 T 033 ,文末自助获取源码 \color{red}{T033,文末自助获取源码} T033,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

MyBatis 增删改查【后端 17】
MyBatis 增删改查 引言 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (…...

计算机网络(运输层)
物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机与主机之间的通信。 实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。 运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务&…...

Linux 线程控制
2. Linux 线程控制 首先,**内核中有没有很明确的线程的概念**,而有**轻量级进程的概念**。当我们想写多线程代码时,可以使用**POSIX线程库**,这是一个 处于应用层位置的库,几乎所有的Linux发行版都默认带这个库&#x…...

内网通3.4.3045广告码、积分码
内网通3.4.3045广告码、积分码 https://download.csdn.net/download/weixin_42120669/89772091...

MATLAB给一段数据加宽频噪声的方法(随机噪声+带通滤波器)
文章目录 引言方法概述完整代码:结果分析结论参考文献引言 在信号处理领域,添加噪声是模拟实际环境中信号传输时常见的操作。宽频噪声可以用于测试系统的鲁棒性和信号处理算法的有效性。本文将介绍如何使用 M A T L A B MATLAB MATLAB给一段数据添加宽频噪声,具体方法是结合…...

网安标委发布敏感个人信息识别指南
9月14日全国网络安全标准化技术委员会秘书处发布《网络安全标准实践指南——敏感个人信息识别指南》 敏感个人信息识别规则: 一旦遭到泄露或者非法使用,容易导致自然人的人格尊严受到侵害、自然人的人身安全受到危害、自然人财产安全受到危害。 注意&am…...

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现
音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…...

几何 | 数学专项
日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 ,常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0,常数列 \end{cases} ⎩ ⎨ ⎧d>0,递增数列d<0,递减数列d0,常数列 【2010.13】 【1.历年真…...

学习CubeIDE——定时器开发
在b站上学习洋桃电子关于HAL库开发,发现使用CubeIDE是真的简单又方便。 实验现象:使用定时器来产生中断,中断程序是LED灯翻转 在我看来,定时器,是一个从0开始增1(常规),增加到一定…...

【Elasticsearch】-图片向量化存储
需要结合深度学习模型 1、pom依赖 注意结尾的webp-imageio 包,用于解决ImageIO.read读取部分图片返回为null的问题 <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.7.0-0</versio…...

二叉树(一)高度与深度
高度:从最底层往上数(后序遍历,左右根),更简单(递归) 深度:从上往下数直到有叶子(前序遍历,根左右),较复杂 高度是最大深度 一、求…...

梧桐数据库(WuTongDB):MySQL 优化器简介
MySQL 优化器是数据库管理系统中的一个重要组件,用于生成并选择最优的查询执行计划,以提高 SQL 查询的执行效率。它采用了基于代价的优化方法(Cost-Based Optimizer, CBO),通过评估不同查询执行方案的代价,…...

交通运输部力推高速公路监测,做好结构安全预警,保护人民安全
在快速发展的交通网络中,高速公路作为经济命脉与生命通道,其结构安全直接关系到每一位行路者的生命财产安全。为此,广东省交通运输厅正式发布《关于积极申报高速公路监测预警应用示范揭榜的通知》,旨在通过技术创新与应用示范&…...

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
系统概述 随着互联网技术的飞速发展,企业与客户之间的沟通方式日益多样化,在线客服系统作为连接企业与客户的桥梁,其重要性不言而喻。然而,市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…...

NEXT.js 创建postgres数据库-关联github项目-连接数据库-在项目初始化数据库的数据
github创建项目仓库创建Vercel账号选择hobby连接github仓库install - deploy创建postgres数据库(等待deploy完成) Continue to DashboardStorage(头部nav哪里)create Postgresconnect连接完后,切换到.env.local&#x…...

Matlab如何配置小波工具(Wavelet Toolbox)
1、发现问题 因为实验要使用小波工具函数,运行时报错如下: 查看对应文件夹发现没有小波工具(也可在控制台输入ver),检查是否有该工具,输入后回车返回如下: 2、下载工具包 没有这个工具就要去下…...

FTP、SFTP安装,整合Springboot教程
文章目录 前言一、FTP、SFTP是什么?1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP1、 创建用户2、配置ssh和权限3、建立目录并赋予权限4、启动…...

24年蓝桥杯及攻防世界赛题-MISC-3
21 reverseMe 复制图片,在线ocr识别,https://ocr.wdku.net/,都不费眼睛。 22 misc_pic_again ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/zsteg] └─$ zsteg misc_pic_again.png imagedata … text: “$$KaTeX parse error: Undefined…...

阿里云容器服务Kubernetes部署新服务
这里部署的是前端项目 1.登录控制台-选择集群 2.选择无状态-命名空间-使用镜像创建 3.填写相关信息 应用基本信息: 容器配置: 高级配置: 创建成功后就可以通过30006端口访问项目了...

记录生产环境,通过域名访问的图片展示不全,通过ip+端口的方式访问图片是完整的
原因:部署nginx的服务器硬盘满了 排查发现nginx日志文件占用了大量硬盘 解决方案: 删除该文件,重启nginx服务,问题解决。...

网络安全实训八(y0usef靶机渗透实例)
1 信息收集 1.1 扫描靶机IP 1.2 收集靶机的端口开放情况 1.3 探测靶机网站的目录 1.4 发现可疑网站 1.5 打开可疑网站 2 渗透 2.1 使用BP获取请求 2.2 使用工具403bypasser.py探测可疑网页 2.3 显示可以添加头信息X-Forwarded-For:localhost来访问 2.4 添加之后转发ÿ…...

QT信号槽原理是什么,如何去使用它?
QT的信号槽(Signals and Slots)机制是QT框架的核心特性之一,它提供了一种对象间通信的方式,使得QT的部件可以在不知道彼此详细实现的情况下相互通信。这种机制在图形用户界面编程中尤为重要,因为它有助于降低对象间的耦…...

mybatisplus介绍以及使用(上)
目录 一、概念 1、什么是mybatisplus 2、为什么要使用mybatisplus 二、mybatisplus的使用 1、安装 2、常用注解 3、条件构造器 一、概念 1、什么是mybatisplus MyBatis-Plus(简称MP)是一个基于MyBatis的增强框架,旨在简化开发、提高…...

maxwell 输出消息到 redis
文章目录 1、maxwell 输出消息到 redis1.1、启动一个Maxwell容器,它会连接到指定的MySQL数据库,捕获变更事件,并将这些事件以Redis发布/订阅的形式发送到指定的Redis服务器1.2、在已运行的 Redis 容器中执行 Redis 命令行界面(CLI…...