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

一、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 客户端模块,感兴趣的开发者们可以进入官方文档中查看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【模型量化】神经网络量化基础及代码学习总结

1 量化的介绍 量化是减少神经网络计算时间和能耗的最有效的方法之一。在神经网络量化中,权重和激活张量存储在比训练时通常使用的16-bit或32-bit更低的比特精度。当从32-bit降低到8-bit,存储张量的内存开销减少了4倍,矩阵乘法的计算成本则二…

【展望2024】,从软件测试用例开始学习起

1. 测试用例的概念 测试用例就是测试人员向被测试系统发起的一组集合,该集合包括测试环境,测试数据,测试步骤,预期结果 2. 设计测试用例的好处 在测试前都要先设计测试用例,设计测试用例有如下好处: 测…

从 0 到 100TB,MatrixOne 助您轻松应对

作者:邓楠MO产品总监 导读 随着传感器和网络技术的大规模应用,海量 IoT 设备产生了巨量数据,传统数据库方案难以满足这些数据的存储和处理需求。MatrixOne 是一款强大的云原生超融合数据库,具备优秀的流式数据写入和加工能力&am…

CLiB中文大模型能力评测榜单

1 引言 目前已囊括48个大模型,覆盖chatgpt、gpt4、谷歌bard、百度文心一言、阿里通义千问、讯飞星火、360智脑、商汤senseChat、微软new-bing、minimax、tigerbot等商用模型, 以及百川、belle、chatglm6b、ziya、guanaco、Phoenix、linly、MOSS、AquilaC…

【开发问题】vue的前端和java的后台,用sm4,实现前台加密,后台解密

sm4加密 vue引入的包代码加密解密 javamaven代码运行结果 vue 引入的包 npm install sm-crypto代码加密解密 加密: key :代表着密钥,必须是16 字节的十六进制密钥 password :加密前的密码 sm4Password :代表sm4加密…

【EMNLP 2023】基于知识迁移的跨语言机器阅读理解算法

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队、达摩院自然语言处理团队合作在自然语言处理顶级会议EMNLP2023上发表基于机器翻译增加的跨语言机器阅读理解算法X-STA。通过利用一个注意力机制的教师来将源语言的答案转移到目标语言的答案输出空间&#x…

外包实在是太坑了,划水三年,感觉人都废了

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

销售技巧培训之如何提高建材销售技巧

建材销售市场竞争也日趋激烈。在这个充满挑战与机遇的市场中,掌握一定的销售技巧对于一个建材销售人员来说至关重要。本文将结合实际案例,探讨一些实用的建材销售技巧,帮助你更好地拓展业务。 一、了解客户需求 在销售过程中,首先…

探索鸿蒙 TextInput组件

TextInput 根据组件名字,可以得知他是一个文本输出框。 声明代码👇 TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本,跟网页开发中的placeholder一样的 text:输入框当前的文本内容 特殊属…

lv11 嵌入式开发 中断控制器14

目录 1 中断控制器 ​编辑 2 Exynos4412下的中断控制器 2.1 概述 2.2 特征 ​编辑 2.3 中断状态 2.4 中断类型 2.5 中断控制器GIC中断表 3 中断控制器寄存器详解 3.1 ICDDCR(Interrupt Controller Distributor Control Register) 3.2 ICDISER…

Python ItsDangerous库:构建安全可靠的数据传输

更多资料获取 📚 个人网站:ipengtao.com ItsDangerous是Python中一个轻量级的库,旨在提供安全且简单的数据传输和签名功能。本文将深入介绍ItsDangerous的核心特性、基本用法以及在实际应用中的一些示例,通过丰富的示例代码&…

CSS特效025:旋转的loading状态

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

一到冬天,助听器出现声音小、无声、时有时无……

冬天是一个寒冷干燥的季节,对于助听器的使用者来说,也是一个需要特别注意保养的季节。助听器是高精密的电子产品,如果不注意保养,可能会出现声音小、无声、时有时无等故障,影响听力康复的效果。那么,冬天我…

揭秘淘宝商品详情数据接口(Taobao.item_get)封装方法

淘宝商品详情数据接口是一种允许开发者通过API访问淘宝平台上的商品详情信息的接口。通过该接口,开发者可以获取到商品的标题、价格、销量、描述等详细信息,为商品展示和销售提供数据支持。 使用淘宝商品详情数据接口需要先在淘宝开放平台上申请并获得相…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展,轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性,助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…

打印菱形图案C语言

C代码实现&#xff1a; #include <stdio.h> void printDiamond(int n) { int i, j, space n - 1; // 打印上半部分包括中间行 for (i 0; i < n; i) { // 打印空格 for (j 0; j < space; j) printf(" "); // 打印星号 for (j 1; j < 2 *…

IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

java获取ip的工具类

java获取ip的工具类 直接上代码 package com.loit.park.common.utils;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException;/*** author hanjinqun*…

大屏图表汇总echarts圆环

圆环效果示例 代码如下 storageStaChart() {let color [#009976,#15E6B5]let charts echarts.init(document.getElementById(storageStaChart));let option this.getPieOption(color);charts.setOption(option, true);}, getPieOption(color) {let data [];data.push({val…