当前位置: 首页 > news >正文

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大题专训之五段式指令流水线题型总结

结构冒险&#xff1a; 指令步骤&#xff1a;IF(取指令) ID(译码) EX&#xff08;执行、计算&#xff09;M&#xff08;访存&#xff09;WB&#xff08;写回&#xff09; 其中if和m都需要访问主存取指令和数据&#xff0c;如何解决呢&#xff1f;可以把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 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…...

什么是数字化转型升级?

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

JAVA开源项目 校园美食分享平台 计算机毕业设计

本文项目编号 T 033 &#xff0c;文末自助获取源码 \color{red}{T033&#xff0c;文末自助获取源码} T033&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

MyBatis 增删改查【后端 17】

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

计算机网络(运输层)

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

Linux 线程控制

2. Linux 线程控制 首先&#xff0c;**内核中有没有很明确的线程的概念**&#xff0c;而有**轻量级进程的概念**。当我们想写多线程代码时&#xff0c;可以使用**POSIX线程库**&#xff0c;这是一个 处于应用层位置的库&#xff0c;几乎所有的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日全国网络安全标准化技术委员会秘书处发布《网络安全标准实践指南——敏感个人信息识别指南》 敏感个人信息识别规则&#xff1a; 一旦遭到泄露或者非法使用&#xff0c;容易导致自然人的人格尊严受到侵害、自然人的人身安全受到危害、自然人财产安全受到危害。 注意&am…...

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…...

几何 | 数学专项

日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 &#xff0c;常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0&#xff0c;常数列 \end{cases} ⎩ ⎨ ⎧​d>0,递增数列d<0,递减数列d0&#xff0c;常数列​ 【2010.13】 【1.历年真…...

学习CubeIDE——定时器开发

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

【Elasticsearch】-图片向量化存储

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

二叉树(一)高度与深度

高度&#xff1a;从最底层往上数&#xff08;后序遍历&#xff0c;左右根&#xff09;&#xff0c;更简单&#xff08;递归&#xff09; 深度&#xff1a;从上往下数直到有叶子&#xff08;前序遍历&#xff0c;根左右&#xff09;&#xff0c;较复杂 高度是最大深度 一、求…...

梧桐数据库(WuTongDB):MySQL 优化器简介

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

交通运输部力推高速公路监测,做好结构安全预警,保护人民安全

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

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;企业与客户之间的沟通方式日益多样化&#xff0c;在线客服系统作为连接企业与客户的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…...

tools.simonwillison.net图像处理工具集:从裁剪到优化的完整指南

tools.simonwillison.net图像处理工具集&#xff1a;从裁剪到优化的完整指南 【免费下载链接】tools Assorted useful tools, almost entirely generated using LLMs 项目地址: https://gitcode.com/gh_mirrors/tools23/tools tools.simonwillison.net图像处理工具集是一…...

C++中显示与隐式加载dll的使用与区别

一、什么是 DLL&#xff1f;DLL&#xff08;Dynamic Link Library&#xff09; 是 Windows 下的动态链接库&#xff0c;包含可被多个程序共享的函数、资源或类。使用 DLL 可以实现代码复用、模块化设计和插件机制。在 C 中&#xff0c;调用 DLL 中的函数有两种主要方式&#xf…...

AMLP:基于大语言模型的自动化机器学习势函数构建平台

1. 项目概述&#xff1a;当AI遇见原子模拟&#xff0c;AMLP如何重塑机器学习势函数构建在计算材料科学和化学物理领域&#xff0c;分子动力学模拟是我们窥探微观世界动态行为的“显微镜”。无论是研究新材料的相变过程&#xff0c;还是探索生物大分子的折叠机制&#xff0c;其核…...

从STM32迁移到普冉PY32F003:UART代码移植保姆级教程(附HAL库对比)

从STM32到普冉PY32F003的UART代码迁移实战指南 1. 国产MCU替代浪潮下的技术选择 近年来&#xff0c;半导体行业的供应链波动促使更多工程师将目光投向国产MCU解决方案。普冉PY32F003系列作为Cortex-M0内核的代表产品&#xff0c;以48MHz主频、64KB Flash和8KB RAM的配置&#x…...

Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效

Visual Paradigm 17.0 团队协作实战指南&#xff1a;从模板配置到文件夹管理的高效工作流在敏捷开发团队中&#xff0c;项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能&#xff0c;特别是服务器端项目模板和文件…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法&#xff1a;从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短"&#xff0c;而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式&#xff0c;往往导致建成后…...

DIY复刻经典:Texar Audio Prism动态处理器克隆套件全攻略

1. 项目概述&#xff1a;Texar Audio Prism 克隆套件如果你在专业音频圈子里混过一段时间&#xff0c;尤其是对上世纪八九十年代那些经典的、带点“魔法”色彩的外置动态处理器感兴趣&#xff0c;那么“Texar Audio Prism”这个名字你大概率不会陌生。它不是最常见的1176或者LA…...

Java数组工具类实战:设计不可实例化的静态工具类

实现一个工具类 MathUtils&#xff0c;满足以下要求&#xff1a; 1. 所有方法均为静态&#xff0c;且该类不能从外部实例化&#xff08;提示&#xff1a;使用私有构造器&#xff09;。 2. 提供三个静态方法&#xff1a;- maxArray(int[] arr)&#xff1a;返回较大值&#xff1b…...

PCB虚焊/走线断裂/焊盘脱落工程师易漏判

PCB 故障中&#xff0c;30% 并非元件损坏&#xff0c;而是 PCB 本身的隐性故障—— 虚焊、走线断裂、焊盘脱落、过孔开路。这类故障外观隐蔽、时好时坏、排查难度大&#xff0c;很多工程师反复更换元件仍无法解决&#xff0c;最终误判为 “板报废”。​一、PCB 隐性故障核心成因…...

毕业设计 yolov11骨折检测医疗辅助系统(源码+论文)

文章目录 0 前言1 项目运行效果2 课题背景2.1 研究背景2.2 国内外研究现状2.3 研究意义 3 设计框架&#xff08;骨折检测系统设计框架说明&#xff09;3.1. 系统架构图3.2. 技术选型3.2.1 核心组件3.2.2 辅助工具 3.3. 核心模块设计3.3.1 YOLO模型训练模块训练流程图关键伪代码…...