爱智EdgerOS之深入解析如何在EdgerOS中使用SQLite3数据库引擎

news2024/10/5 8:14:15

一、SQLite 简介

  • 数据管理是应用开发者最常遇到的挑战之一,无论是支付宝的余额,或是京东购物车里的商品,都需要存储在对应服务后端的数据库中,以满足用户查询、转账、购买等各种各样的使用场景。
  • EdgerOS 智能边缘计算操作系统内置了多种数据库能力,比如 EdgerOS 的媒体中心模块,可以完成视频、照片、文本等数据文件的管理。另外 EdgerOS 自身还搭载了多个常用的数据库客户端如 MySQL、Redis,方便使用者连接外部数据库,同时自身也搭载了 SQLite3 数据库引擎,能够满足不同业务场景下开发者自由定制数据管理的需求。
  • SQLite 是一种轻量型、进程内的关系型数据库, 它实现了一个自包含的、无服务器的、零配置的事务性 SQL 数据库引擎。SQLite 是世界上最广泛部署的 SQL 数据库引擎,在最新的 DB-Engines 排名中 SQLite 位居第七,且常年保持在前十名。

在这里插入图片描述

二、SQLite3 数据类型

  • SQLite3 数据库有以下数据类型:
    • NULL 空值。
    • INTEGER 有符号的整数。
    • REAL 双精度浮点数。
    • TEXT 文本类型可以支持 UTF-8、UTF-16 编解码。
    • BLOB 二进制数据类型。
  • SQLite3 支持亲和类型的概念,在使用 SQL 语句构建表单时,仍可以使用 SQL 中任何数据类型,但当真正插入数据时,该类型的数据将优先采用亲和类型作为该值的存储方式。
  • 下表列出了亲和类型的对应关系:

在这里插入图片描述

三、EdgerOS SQLite3

  • EdgerOS 将 SQLite3 数据库封装在 “sqlite3” 模块中,应用开发时可以使用以下代码来导入该模块:
const Sqlite3 = require('sqlite3');
  • 需要初始化一个 SQLite3 实例对象,通过调用该对象的 API 接口完成对数据库引擎的操作。

① new Sqlite3(fileName[, flags])

  • 参数说明:
    • fileName {String} 数据文件存放地址,当 fileName 为 ‘:memory:’ 时,意味着创建一个匿名的内存数据库。
    • flags {String} 文件访问类型,默认使用 “c+”。
  • 可以通过以下代码生成数据库的实例,如果所传入的数据文件不存在,将默认创建该文件:
const db = new Sqlite3(':memory:');
// or
const db = new Sqlite3('./test.db');
  • 也可以通过 open 方法打开一个数据库实例,区别在于 open 方法不会抛出异常,返回值为 undefined 时表示打开失败。

② Sqlite3.open(fileName[, flags ])

  • 参数说明:
    • fileName {String} 数据文件存放地址;
    • flags {String} 文件访问类型 默认使用 “c+”。
  • 通过这个数据库实例来完成对数据库引擎的具体操作:
const db = Sqlite3.open('./test.db')
  • 现在已经拥有了数据库实例,接下来通过该实例执行 SQL 语句,完成建表、增、删、改、查等操作。执行 SQL 语句只需要使用实例中的 run 方法即可完成。

③ db.run(sql[, …bind[, query[, arg]])

  • 参数说明:
    • sql {String} 需要执行的 SQL 语句;
    • …bind {Any} 根据 SQL 语句中的 ‘?’ 绑定的变量,默认情况下不绑定变量
    • query {Function} 查询语句回调方法如果是查询语句,被查询的每条记录都会回调这个函数。
    • arg {Any} 可选的回调参数
    • row {Object} 查询结果对象
    • arg {Any} 设置查询语句的 arg 回调参数,默认为:undefined
  • 因此根据以上描述只需要使用 run 指令便可以完成对数据库表数据的操作控制,接下来用简短的几行代码来看看实际应用的效果:
const Sqlite3 = require('sqlite3')
const db = Sqlite3.open('./test.db')
db.run('CREATE TABLE if not exists user(name text, age int);');

db.run('INSERT INTO user VALUES("Jack", 23);');
db.run('INSERT INTO user VALUES("Rose", 21);');

function queryCallback(row) {
    console.log('name', row.name, 'age', row.age);
}

db.run('SELECT * FROM user;', queryCallback);

[JSRE-CON]name Jack age 23
[JSRE-CON]name Rose age 21

四、SQLite3 事务操作

  • sqlite3 模块也同时提供了数据库事务操作 API,数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
  • db.begin():Begin 接口会打开一个事务,与db.run(‘BEGIN;’)相同。
  • db.commit():提交一个事务,与db.run(‘COMMIT;’)相同。
  • db.rollback():回滚一个事务,与db.run(‘ROLLBACK;’)相同。
  • 通过代码来简单了解一下 sqlite3 模块事务操作接口的使用:
const Sqlite3 = require('sqlite3')
const db = Sqlite3.open('./test.db')
db.run('CREATE TABLE if not exists user(name text, age int);');


db.begin();
db.run('INSERT INTO user VALUES("Jack", 23);');
db.run('INSERT INTO user VALUES("Rose", 21);');
db.commit();

db.begin();
db.run('INSERT INTO user VALUES("Allson", 23);');
db.run('INSERT INTO user VALUES("Babs", 21);');
db.rollback()

db.begin();
db.run('INSERT INTO user VALUES("Chrissie", 23);');
db.run('INSERT INTO user VALUES("Debby", 21);');
db.commit();

function queryCallback(row) {
    console.log('name', row.name, 'age', row.age);
}

db.run('SELECT * FROM user;', queryCallback);

// 运行实际输出结果
[JSRE-CON]name Jack age 23
[JSRE-CON]name Rose age 21
[JSRE-CON]name Chrissie age 23
[JSRE-CON]name Debby age 21
  • 从实际运行的结果上,可以了解到,Allson,Babs 完成插入操作后,紧接着运行了 rollback 方法触发数据回滚,所以在最后输出表中数据时,数据库中并不存在这两条数据记录。
  • 到这里,大家对 EdgerOS 中 sqlite3 模块的使用方法已经有了初步的认识。在此之外 EdgerOS 系统中也包含了很多其他类型的数据库模块, 例如支持 K-V 存储的 LightKV 数据库引擎,自研的同步式数据库 SyncTable,以及我们网络开发中经常使用的的 mysql 客户端模块,感兴趣的开发者们可以进入官方文档中查看。

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

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

相关文章

CCF 202104-2:邻域均值--C++

#include<iostream> #include<bits/stdc.h>using namespace std;int A[601][601]; int n;//长宽都为n个像素double FindNeighborSum(int i,int j,int r,int A[][601]) {int sum0;//像素和 int gs0;//领域 中的像素个数 for(int xi-r;x<ir;x)//找到每一个领域像素…

Numpy数组的运算(第7讲)

Numpy数组的运算(第7讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

盘点11月Sui生态发展,了解Sui的近期成长历程!

11月是Web3的“回暖期”&#xff0c;行业持续展现增长趋势。Sui紧随行业脚步&#xff0c;开展了一系列生态活动。其中历时一个多月的Quest 3游戏活动顺利结束并公布奖励&#xff0c;在多地区成功举办Move和Sui生态黑客松&交流会&#xff0c;还有针对中文社区开发者教育的星…

一.初始typescript

什么是ts 首先我们要确认typescript是一个语言&#xff0c;是等同于JavaScript层级得&#xff0c;并不是一些人认为得是JavaScript得类型规范工具或者插件。 ts与js的差异 从type script这个名字就可以看出&#xff0c;ts其实是JavaScript的一个类型化超集&#xff0c;它增…

低多边形游戏风格3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

[linux] kaggle 数据集用linux下载

你可以通过以下步骤获取Kaggle的下载链接并在Linux中进行下载&#xff1a; 首先&#xff0c;确保你已经安装了Python和Kaggle API。如果没有安装&#xff0c;你可以通过以下命令安装&#xff1a; pip install kaggle 接着&#xff0c;你需要在Kaggle网站上获取API Token。登录…

大数据技术1:大数据发展简史

前言&#xff1a;学习大数据技术&#xff0c;知道会用已经够了&#xff0c;但是要想走得更远&#xff0c;应该了解它发展的来龙去脉&#xff0c;为何会有新的技术/工具的出现&#xff0c;相比老的技术有什么样的进步。 1、传统数据处理系统存在的问题 随着信息时代互联网技术爆…

重新认识Word——多级列表和项目符号

重新认识Word——多级列表和项目符号 多级列表没有运用标题样式但标题格式统一 正式公本文书项目符号和自动编号项目符号自动编号软回车重新起头开始编号解决编号与文本距离过大问题 之前我们重新认识了Word里面的样式&#xff0c;现在的情况就是&#xff0c;我的一些文字已经运…

【kubernetes】k3s集群搭建(正在更新……)

文章目录 一、k3s简介二、快速搭建1.控制平面2.镜像加速 Pod容器集1.创建和管理pod Deployment(部署)与ReplicaSet(副本集)滚动更新 Service命名空间YAML语法管理对象常用命令缩写YAML规范 声明式配置对象标签选择器 容器运行时接口(CRI)与镜像导入导出容器运行时接口(CRI) 金丝…

案例062:基于微信小程序的健身房私教预约系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

乔拓云平台:微信小程序开发的全新视角与高效路径

随着微信小程序的日益普及&#xff0c;越来越多的人开始关注如何开发自己的小程序。对于没有开发经验的人来说&#xff0c;借助第三方平台如乔拓云&#xff0c;可以轻松实现小程序的开发。本文将介绍微信小程序开发需要学习的东西&#xff0c;并探讨如何借助乔拓云平台进行无经…

十一、了解分布式计算

1、什么是&#xff08;数据&#xff09;计算&#xff1f; 2、分布式(数据)计算 &#xff08;1&#xff09;概念 顾名思义&#xff0c;分布式计算&#xff0c;即以分布式的形式完成数据的统计&#xff0c;得到需要的结果。 分布式数据计算&#xff0c;顾名思义&#xff0c;就是…

视频批量剪辑方法:AI智剪创新力,批量剪辑新风潮

随着数字媒体技术的不断发展&#xff0c;视频剪辑已经成为日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多非专业人士来说&#xff0c;视频剪辑仍然是一个相对繁琐和复杂的过程。AI智剪是一种基于人工智能技术的视频批量剪辑方法。它可以通过自动化和智能化的方式…

实现SQL server数据库完整性

1.创建一个数据库名为“erp” 主数据文件&#xff1a;初始容量为5MB&#xff0c;最大容量为50MB&#xff0c;递增量为1MB&#xff0c;其余参数自设。事务日志文件&#xff1a;初始容量为3MB&#xff0c;最大容量为20MB&#xff0c;递增量为10%&#xff0c;其余参数自设。 创建…

temu的产品审核结果在哪里

拼多多作为中国最大的社交电商平台之一&#xff0c;拥有众多商家和卖家在其平台上销售商品。为了确保平台上的商品质量和合规性&#xff0c;拼多多对商家所提交的商品进行审核。如果您是在拼多多的Temu平台上销售商品&#xff0c;想要查询您的产品审核结果&#xff0c;可以按照…

维普论文查重率高【详细说明】

大家好&#xff0c;今天来聊聊维普论文查重率高&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 维普论文查重率高&#xff1a;原因分析与降重技巧 背景介绍 在学术领域&#xff0c;论文的重复率是衡量其…

计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

计算机视觉之手势、面部、姿势捕捉以 Python Mediapipe为工具 文章目录 1.Mediapipe库概述2.手势捕捉(hands)3.面部捕捉(face)4.姿势捕捉(pose) 1.Mediapipe库概述 Mediapipe是一个开源且强大的Python库&#xff0c;由Google开发和维护。它提供了丰富的工具和功能&#xff0c…

【开源】基于Vue和SpringBoot的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

Vue脚手架 生命周期 组件化开发

Vue脚手架 & 生命周期 & 组件化开发 一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.综合案例-小黑记账清单 列表渲染添加/删除饼图渲染 3.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 4.综合案例-小兔…

Python与ArcGIS系列(十五)根据距离抓取字段

目录 0 简述1 实例需求2 arcpy开发脚本0 简述 在处理gis数据的时候,会遇到这种需求:将一个图层与另一个图层中相近的要素进行字段赋值。本篇将介绍如何利用arcpy及arcgis的工具箱实现这个功能。 1 实例需求 为了介绍这个功能的实现,我们需要有一个特定的功能需求。在这里选…