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

文章目录

  • 前言
  • 一、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;而是同时管…

5月13日,每日信息差

第一、北京近期发生一起诈骗案件&#xff0c;犯罪分子伪装成宽带维修人员&#xff0c;上门为老人安装 VOIP 设备&#xff0c;以此从事电信诈骗活动。设备安装后&#xff0c;会使家庭网络被用于诈骗&#xff0c;且因设备隐蔽安装在居民家中难以察觉。目前&#xff0c;嫌疑人已被…

Python 错误 TypeError 解析,实际错误实例详解 (二)

文章目录 前言Python 错误 TypeError: Decoding Unicode Is Not SupportedPython 中 TypeError: decoding Unicode is not supported 错误修复 Python 中 TypeError: decoding Unicode is not supportedPython 错误 TypeError: ‘map‘ object Is Not SubscriptablePython 中出…

poi导出word 详细教程

文章目录 HWPFHWPF的基本概念基本操作引入的依赖读取Word文档创建Word文档修改Word文档 高级操作操作表格格式化文本 XWPFHWPF的基本概念基本操作读取Word文档创建Word文档修改Word文档 高级操作操作表格格式化文本 HWPF HWPF的基本概念 HWPF是Apache POI项目中的一个组件&am…

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

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

tonemapping相关

参考 tone mapping thinkingACES Filmic Tone Mapping Curvefilmic-tonemapping-with-piecewise-power-curvesGDC high dynamic range

MySQL解析JSON格式字段并取出部分值

在MySQL中&#xff0c;从JSON格式的字段中提取数据可以使用JSON_EXTRACT()函数&#xff0c;或者使用->操作符。以下是一些示例&#xff1a; 假设你有一个名为mytable的表&#xff0c;其中有一个json_data字段&#xff0c;它的数据类型是JSON&#xff0c;并且包含了一个JSON…

【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&…

Excel中的`MMULT`函数

Excel中的MMULT函数是一个用于执行矩阵乘法运算的函数。矩阵乘法是线性代数中的一个基本运算&#xff0c;它允许我们计算两个矩阵的乘积&#xff0c;得到一个新的矩阵。与普通的标量乘法不同&#xff0c;矩阵乘法涉及到行与列的对应元素相乘然后求和的过程。MMULT函数在进行数据…

Circuitbreaker Resilience4j 替换Netflix Hystrix

Spring cloud 早已经不支持也不维护Netflix Hystrix了。但是项目中一直用openfeign&#xff0c; Feign里的fallback原来一直用Hystrix做熔断。怎么找到一个可以替换hystrix相同的东西呢&#xff1f;用CricuitBreaker Resilience4j可以完全替换。 在pom.xml中加入spring-cloud-…

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…

在Ubuntu下搭建自己的以太坊私有链

最近要对链及链上应用进行压测,为了方便操作及分析问题,就自己搭建了一个eth私链。当前版本安装官方指引发现有卡点,于是决定整理一个文档,为其他有需要的朋友提供便捷操作,节约时间。 一、环境配置 linux操作系统:Ubuntu 20.04.6 LTS (Focal Fossa) go version: go1…

【VUE.js】---

问题 vue.config.js 文件中使用了 vue/cli-service 的新特性 defineConfig&#xff0c;但是你的项目依赖版本过旧。 defineConfig 是一个用于定义 Vue CLI 项目配置的辅助函数&#xff0c;它可以帮助 TypeScript 用户更好地获取类型提示。但是&#xff0c;你使用的是 Vue CLI 的…

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…

【macos】dnsmasq搭建DNS服务器

dnsmasq安装 brew install dnsmasq brew info dnsmasq//每次配置完&#xff0c;重启服务 sudo brew services restart dnsmasq修改 /usr/local/etc/dnsmasq.conf log-queries log-facility/var/log/dnsmasq.log bogus-nxdomain119.29.29.29 cache-size2048 port53 no-resolv/…

详细对比Sass与SCSS

Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;和SCSS&#xff08;Sassy Cascaded Style Sheets&#xff09;都是CSS的预处理器&#xff0c;它们允许开发者使用变量、嵌套规则、函数和其他编程特性来编写更易于维护和管理的样式表。然而&#xff0c;Sass和SC…