嵌入式数据库概念和基本命令的使用

文章目录

  • 前言
  • 一、sqlite数据库概念
  • 二、sqlite数据库命令分类和使用
    • 1.命令分类
      • 1. 系统命令:
      • 2. SQLite 命令:
    • 2.系统命令的使用
    • 3.sqlite命令的使用
  • 三、sqlite C语言函数的使用和编程方法
  • 总结


前言

本篇文章将为大家讲解嵌入式数据库的使用,嵌入式数据的话主要是使用sqlite数据库。

一、sqlite数据库概念

SQLite 是一种轻量级的嵌入式关系型数据库管理系统(RDBMS),它被广泛应用于各种应用程序中,从移动应用到桌面应用再到 Web 应用。以下是关于 SQLite 数据库的一些概念解释:

  1. 嵌入式数据库管理系统(Embedded Database Management System):SQLite 是一种嵌入式数据库,这意味着它不需要独立的服务器进程来管理数据库。相反,SQLite 数据库引擎被直接集成到应用程序中,数据库以文件的形式存储在主机文件系统中。

  2. 关系型数据库管理系统(RDBMS):SQLite 是关系型数据库管理系统的一种,这意味着它使用表、行和列来组织和存储数据。它支持 SQL(Structured Query Language)作为与数据库交互的标准语言。

  3. 轻量级(Lightweight):SQLite 设计用于在资源有限的环境下运行,并且具有小巧、快速和高效的特点。它的库文件大小相对较小,且资源消耗较低,适用于嵌入式系统和移动设备等场景。

  4. 零配置(Zero Configuration):使用 SQLite 时,不需要进行复杂的配置或管理。只需包含 SQLite 库并在应用程序中指定数据库文件的路径,即可开始使用。

  5. 单用户访问(Single-User Access):SQLite 不支持多用户同时访问同一数据库文件。只有一个用户(即应用程序)可以连接到数据库并对其进行读写操作。这在某些情况下可能是限制,但也确保了数据的完整性和一致性。

  6. 跨平台性(Cross-Platform):SQLite 可以在多种操作系统上运行,包括 Windows、macOS、Linux 等,因此它是一个跨平台的解决方案。

  7. 事务支持(Transaction Support):SQLite 支持事务,允许将一系列数据库操作组合成一个逻辑单元,要么全部成功执行,要么全部失败回滚。这有助于确保数据的一致性和完整性。

  8. 自包含性(Self-Contained):SQLite 数据库被存储在单个文件中,并且所有的数据库操作都在该文件内执行。这种自包含性使得 SQLite 数据库易于传输、备份和维护。

总的来说,SQLite 是一种简单、快速、易于使用的数据库解决方案,特别适用于对数据库性能要求不高、规模较小的应用程序。

二、sqlite数据库命令分类和使用

1.命令分类

当谈到 SQLite 数据库命令时,可以将其分为两类:系统命令和 SQLite 特定的命令。

1. 系统命令:

系统命令是在命令行界面或终端中执行的命令,用于管理 SQLite 数据库和与操作系统交互。这些命令通常不是 SQLite 引擎的一部分,而是与 SQLite 交互的外部工具或系统级命令。

一些常见的系统命令包括:

  • sqlite3命令:用于启动 SQLite 数据库的命令行 shell,使用户能够与 SQLite 数据库进行交互。
  • 操作系统命令:例如在 Unix/Linux 系统中的 ls、cd 等命令,或在 Windows 中的 dir、cd 等命令,用于管理文件和目录。

2. SQLite 命令:

SQLite 命令是在 SQLite 数据库命令行 shell 中执行的命令,用于管理数据库、执行查询、事务控制等操作。这些命令是 SQLite 引擎的一部分,直接与 SQLite 数据库进行交互。

一些常见的 SQLite 命令包括:

  • DDL 命令(数据定义语言):用于定义、修改和删除数据库对象,例如 CREATE TABLE、ALTER TABLE、DROP TABLE 等。
  • DML 命令(数据操作语言):用于执行对数据库中的数据进行增、删、改的操作,例如 INSERT、UPDATE、DELETE。
  • DQL 命令(数据查询语言):用于执行对数据库中的数据进行查询的操作,例如 SELECT。
  • 事务控制命令:用于管理事务的开始、提交、回滚等,例如 BEGIN TRANSACTION、COMMIT、ROLLBACK。

这些 SQLite 命令是在 SQLite shell 中执行的,它们提供了一种直接与 SQLite 数据库进行交互的方式,并且可以通过脚本或编程语言中的 SQLite API 进行扩展和自动化。

2.系统命令的使用

1.查看帮助文档:

.help

在这里插入图片描述
2.显示当前输出模式:

.show

在这里插入图片描述
3.打开/关闭输出展示模式(可选为列模式或者显示模式):

.mode column  -- 列模式
.mode line    -- 行模式
.mode csv     -- CSV 模式

4.退出 SQLite3:

.quit

在这里插入图片描述

3.sqlite命令的使用

1.创建数据库:

sqlite3 mydatabase.db

这个命令会创建一个名为mydatabase.db的SQLite数据库文件,并打开一个SQLite shell供你进行交互式操作。
在这里插入图片描述
2.创建表:

CREATE TABLE users (id INTEGER PRIMARY KEY,username TEXT,email TEXT UNIQUE,age INTEGER
);

这个命令会在数据库中创建一个名为users的表,包含id、username、email和age四个列。id列是主键,并且email列是唯一的。

在这里插入图片描述
3.插入数据:

INSERT INTO users (username, email, age) VALUES ('John', 'john@example.com', 30);

在这里插入图片描述
4.查询数据:

SELECT * FROM users;

这个命令会从users表中检索所有数据。

在这里插入图片描述
5.更新数据:

UPDATE users SET age = 31 WHERE username = 'John';

在这里插入图片描述
6.删除数据:

DELETE FROM users WHERE username = 'John';

在这里插入图片描述
7.退出SQLite shell:

.quit

三、sqlite C语言函数的使用和编程方法

SQLite提供了一组C语言API函数,使开发者可以在C程序中使用SQLite数据库。下面是一些常用的SQLite C语言函数以及它们的意思和用法:

  1. sqlite3_open()

    • 作用:用于打开一个SQLite数据库连接。
    • 参数:
      • const char *filename:数据库文件名。
      • sqlite3 **ppDb:指向sqlite3指针的指针,用于存储数据库连接对象。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
  2. sqlite3_close()

    • 作用:关闭先前由sqlite3_open()函数打开的数据库连接。
    • 参数:
      • sqlite3 *db:数据库连接对象。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
  3. sqlite3_exec()

    • 作用:执行SQL语句,并对每个执行的结果调用一个回调函数。
    • 参数:
      • sqlite3 *db:数据库连接对象。
      • const char *sql:要执行的SQL语句。
      • int (*callback)(void*, int, char**, char**):回调函数,用于处理执行结果。
      • void *data:传递给回调函数的数据。
      • char **errmsg:指向错误信息的指针,若执行过程中发生错误,会将错误信息存储在这里。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
  4. sqlite3_prepare_v2()

    • 作用:编译SQL语句,创建一个准备语句对象。
    • 参数:
      • sqlite3 *db:数据库连接对象。
      • const char *sql:要编译的SQL语句。
      • int sql_len:SQL语句的长度(如果为-1,则SQLite会自动计算)。
      • sqlite3_stmt **stmt:指向sqlite3_stmt指针的指针,用于存储准备语句对象。
      • const char **pzTail:指向剩余未处理的SQL语句的指针。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
  5. sqlite3_step()

    • 作用:执行准备好的SQL语句的下一步操作。
    • 参数:
      • sqlite3_stmt *stmt:准备语句对象。
    • 返回值:若操作成功,返回SQLITE_ROW(表示查询结果行)或SQLITE_DONE(表示执行完成);否则返回其他错误码。
  6. sqlite3_bind_XXX()

    • 作用:绑定参数到准备好的SQL语句中。
    • 参数:
      • sqlite3_stmt *stmt:准备语句对象。
      • int idx:参数索引,从1开始。
      • XXX value:要绑定的参数值,XXX代表不同数据类型,例如sqlite3_bind_int()、sqlite3_bind_text()等。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
  7. sqlite3_column_XXX()

    • 作用:获取查询结果中指定列的值。
    • 参数:
      • sqlite3_stmt *stmt:准备语句对象。
      • int idx:列索引,从0开始。
    • 返回值:列的值,XXX代表不同数据类型,例如sqlite3_column_int()、sqlite3_column_text()等。
  8. sqlite3_finalize()

    • 作用:释放准备语句对象所占用的资源。
    • 参数:
      • sqlite3_stmt *stmt:准备语句对象。
    • 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。

这些是SQLite C语言API中的一些常用函数,通过它们可以在C程序中实现对SQLite数据库的操作。

#include <stdio.h>
#include <sqlite3.h>// 回调函数用于处理查询结果
int callback(void *data, int argc, char **argv, char **azColName){int i;printf("%s: ", (const char*)data);for(i = 0; i < argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[]) {sqlite3 *db;char *zErrMsg = 0;int rc;// 打开数据库连接rc = sqlite3_open("test.db", &db);if (rc) {fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));return(0);} else {fprintf(stderr, "Opened database successfully\n");}// 创建表const char *sql_create = "CREATE TABLE IF NOT EXISTS COMPANY("  \"ID INT PRIMARY KEY     NOT NULL," \"NAME           TEXT    NOT NULL," \"AGE            INT     NOT NULL," \"ADDRESS        CHAR(50)," \"SALARY         REAL );";rc = sqlite3_exec(db, sql_create, callback, 0, &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);} else {fprintf(stdout, "Table created successfully\n");}// 插入数据const char *sql_insert = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "     \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";rc = sqlite3_exec(db, sql_insert, callback, 0, &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);} else {fprintf(stdout, "Records created successfully\n");}// 查询数据const char *sql_select = "SELECT * from COMPANY";printf("Selecting records...\n");rc = sqlite3_exec(db, sql_select, callback, (void*) "Select", &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}// 关闭数据库连接sqlite3_close(db);return 0;
}

这个示例程序完成了以下操作:

打开一个名为"test.db"的数据库连接。

创建一个名为"COMPANY"的表,包含ID、NAME、AGE、ADDRESS和SALARY字段。

插入一些记录到"COMPANY"表中。

查询"COMPANY"表中的所有记录,并打印输出。

关闭数据库连接。

你可以根据需要修改SQL语句以及数据处理部分来完成其他操作,比如更新数据、删除数据等。

总结

本篇文章主要讲解了数据库的概念和数据库的一些基本命令的使用,这篇文章就讲解到这里,下篇文章我们继续讲解。

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

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

相关文章

非常简单的长期兼职,无脑复制粘贴,每天稳定200-300+

带货这个概念已经不再陌生&#xff0c;许多人对此产生了浓厚的兴趣。今天&#xff0c;我将向大家介绍一个百家号带货项目&#xff0c;这是我一位朋友正在操作的项目。最近与他交流后&#xff0c;我觉得这个项目具有相当的操作性。他并非只运营了一个账号&#xff0c;而是同时管…

东芝移动硬盘数据恢复方法有哪些

谁能懂我此刻的心情啊&#xff01;移动硬盘用起来真的超级方便&#xff0c;如今我的工作几乎都离不开它&#xff0c;用来存放各种重要文件。可是&#xff0c;让人头疼的事情发生了&#xff0c;昨天我发现移动硬盘里的部分数据竟然莫名其妙地消失了&#xff01;这可咋整啊&#…

【GD32】03 - EXTI外部中断

EXTI EXTI&#xff0c;全称External Interrupt/Event Controller&#xff0c;即外部中断/事件控制器&#xff0c;是微控制器中的一个重要组成部分。它主要用于管理来自外部设备的中断和事件请求。以下是关于EXTI的详细介绍&#xff1a; 功能概述&#xff1a; EXTI管理了控制器的…

n的阶乘(函数)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明n的阶乘函数fac; int fac(int n);int main() {//初始化变量值&#xff1b;int n, result;//获取要阶乘的数&#xff1b;printf("请输入要阶乘的n&…

Python中进程类Process的方法与属性的使用示例

一、示例代码&#xff1a; from multiprocessing import Process import time import osdef child_1(interval):print(子进程&#xff08;%s&#xff09;开始执行&#xff0c;父进程为&#xff08;%s&#xff09; % (os.getpid(), os.getppid()))t_start time.time()time.sle…

shell脚本中条件语句

一.test测试 在Shell脚本中&#xff0c;test命令用于进行条件测试。它也可以通过方括号[]来表示&#xff0c;因为test实际上是[命令的一个别名。 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 注意[ ]空格&#xff0c;否则会失败 测试 是否成功使用…

【opencv】图像处理(二)

前文指引 一、使用到的图片 一、梯度计算 原始图片 img cv2.imread(circle.jpg)plt.imshow(img) plt.show()sobel算子 使用两个核 Gx [[-1,0,1], [-2,0,2], [-1,0,1]] Gy [[-1,-2,-1], [0,0,0], [1,2,1]] dst cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth 深度 -1d…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗&#xff1f;&#xff1f;&#xff1f; 找到域馆&#xff0c;拿下域控&#xff01;&#xff01; 拿下了域控就是拿下了整个域&#xff01;&#xff01; 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)&#xff1f;&#xff1f;&#xff1f; …

GCP谷歌云有什么数据库类型,该怎么选择

GCP谷歌云提供的数据库类型主要包括&#xff1a; 关系型数据库&#xff1a;这类数据库适用于结构化数据&#xff0c;通常用于数据结构不经常发生变化的场合。在GCP中&#xff0c;关系型数据库选项包括Cloud SQL和Cloud Spanner。Cloud SQL提供托管的MySQL、PostgreSQL和SQL Se…

提升文本到图像模型的空间一致性:SPRIGHT数据集与训练技术的新进展

当前的T2I模型&#xff0c;如Stable Diffusion和DALL-E&#xff0c;虽然在生成高分辨率、逼真图像方面取得了成功&#xff0c;但在空间一致性方面存在不足。这些模型往往无法精确地按照文本提示中描述的空间关系来生成图像。为了解决这一问题&#xff0c;研究人员进行了深入分析…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

STM32(开篇总结)

STM32介绍 STM32是意法半导体公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器…

数据可视化(十二):Pandas太阳黑子数据、图像处理——离散极值、核密度、拟合曲线、奇异值分解等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

SpringSecurity的核心原理使用总结

1. SpringSecurity的核心原理 对于最原始Servlet请求处理的层次结构 客户端->过滤器链->Servlet 对于在SpringMVC中处理请求的层次结构 如何让Filter与Spring建立连接呢? 因此它增加了一个DelegatingFilterProxy 它是SpringMVC提供的的Filter,它内部代理了一个原生的F…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 &#xff08;1&#xff09;Maven的下载与安装 &#xff08;2&#xff09;配置Maven的环境变量 &#xff08;3&#xff09;本地仓库的配置 &#xff08;4…

景联文科技:用高质量数据采集标注赋能无人机技术,引领无人机迈入新纪元!

随着无人机技术的不断发展与革新&#xff0c;它已成为现代社会中一个前景无限的科技领域。 无人机应用领域 边境巡逻与安防&#xff1a;边境管理部门利用无人机监控边境线&#xff0c;防止非法越境和其他安全威胁&#xff0c;同时也能监控地面安保人员的工作状态和行动路线。 …

JVM的垃圾回收算法有哪些?从可达性分析算法开始,深入解读三大核心垃圾回收算法

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、概念准备 1.1 GC Roots 1.2 可达性分析算法 1.3 非可达对象被回收过程中的两次标记 1.4…

vue从入门到精通(一):初始Vue

一&#xff0c;Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代…

质量保障之精准测试!

一、背景与概念 随着软件测试行业的长足发展&#xff0c;测试理念、技术都在发生着日新月异的变化。因此一套完整的自动化测试用例对于每个软件公司都是不可或缺的&#xff0c;然而虽然有如此规模宏大的自动化案例集资源投入&#xff0c;同时也有大量人力的投入&#xff0c;但…

虚拟仿真云平台在教育应用中的优势和意义

虚拟仿真云实验教学平台作为一种新型的教学方法&#xff0c;近年来在高校教育中得到了十分广泛的应用。它通过模拟真实的实验场景和实验操作&#xff0c;让学生在计算机上进行实验操作和数据处理&#xff0c;为学生提供了更加便捷、可靠、有效的实验学习环境。本文&#xff0c;…