uni-app集成sqlite
Sqlite
SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中,这使得它非常适合用于开发小型到中型的应用程序。
作用
一般用于app离线缓存
集成方法
第一步勾选中SQLite 模块
第二步
我将代码都放到了一个文件夹里
index.js 该文件参考网上来源
let dbName = 'transfer'
/** 打开数据库或者创建数据库*/
export const openDb = () => {return new Promise((resolve, reject) => {if (isOpen()) {resolve()return}plus.sqlite.openDatabase({name: dbName,path: `_doc/storage/${dbName}.db`,success: (db) => {console.log('打开数据库成功', db)resolve(db)},fail: (e) => {console.log('打开数据库失败', e)reject(e)},})})
}
/** 创建表,执行sql语句* @param {String} tableName 表名* @param {String} data 表结构*/
export const createTable = (tableName, data) => {return new Promise(async (resolve, reject) => {if (!tableName || !data) {return}let flag = await isTable(tableName)if (flag) {resolve(true)return}plus.sqlite.executeSql({name: dbName,sql: `CREATE TABLE IF NOT EXISTS ${tableName} ${data}`,success: (e) => {console.log('创建表成功', e)resolve(e)},fail: (e) => {console.log('创建表失败', e)reject()},})})
}
/** 判断表是否存在* @param {String} tableName 表名*/
export const isTable = (tableName) => {return new Promise((resolve, reject) => {if (!tableName) {return}plus.sqlite.selectSql({name: dbName,sql: `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`,success: (e) => {console.log('查询表成功', e)resolve(e.length ? true : false)},fail: (e) => {console.log('查询表失败', e)reject(e)},})})
}
/** 删除表* @param {String} tableName 表名*/
export const deleteTable = (tableName) => {return new Promise((resolve, reject) => {if (!tableName) {return}plus.sqlite.executeSql({name: dbName,sql: `DROP TABLE IF EXISTS ${tableName}`,success: (e) => {console.log('删除表成功', e)resolve(e)},fail: (e) => {console.log('删除表失败', e)reject(e)},})})
}
/** 删除所有表数据*/
export const deleteTableData = (tableName, whereSql) => {if (!tableName) {return}let sql = `DELETE FROM ${tableName}`if (whereSql) {sql = `DELETE FROM ${tableName} WHERE ${whereSql}`}return new Promise((resolve, reject) => {plus.sqlite.executeSql({name: dbName,sql,success: (e) => {console.log('删除表数据成功', e)resolve(e)},fail: (e) => {console.log('删除表数据失败', e)reject(e)},})})
}/** 查询所有表*/export const getTable = () => {return new Promise((resolve, reject) => {plus.sqlite.selectSql({name: dbName,sql: `SELECT name FROM sqlite_master WHERE type='table'`,success: (e) => {console.log('查询表成功', e)resolve(e)},fail: (e) => {console.log('查询表失败', e)reject(e)},})})
}
/** 插入数据* @param {String} tableName 表名* @param {Object} data 数据*/
export const insertData = (sql) => {return new Promise((resolve, reject) => {plus.sqlite.executeSql({name: dbName,sql: sql,success: (e) => {console.log('插入数据成功', e)resolve(e)},fail: (e) => {console.log('插入数据失败', e)reject(e)},})})
}/** 查询数据* @param {String} tableName 表名*/
export const selectData = (tableName) => {return new Promise((resolve, reject) => {if (!tableName) {return}plus.sqlite.selectSql({name: dbName,sql: `SELECT * FROM ${tableName}`,success: (e) => {console.log('查询数据成功', e)resolve(e)},fail: (e) => {console.log('查询数据失败', e)reject(e)},})})
}
/** 判断数据库是否打开*/
export const isOpen = () => {let open = plus.sqlite.isOpenDatabase({name: dbName,path: `_doc/storage/${dbName}.db`,})console.log('数据库是否打开', open)return open
}
/** 关闭数据库*/
export const closeDb = () => {return new Promise((resolve, reject) => {plus.sqlite.closeDatabase({name: dbName,path: `_doc/storage/${dbName}.db`,success: (e) => {console.log('关闭数据库成功', e)resolve(e)},fail: (e) => {console.log('关闭数据库失败', e)reject(e)},})})
}export const sqlite = {openDb,createTable,isTable,isOpen,closeDb,insertData,selectData,getTable,deleteTable,deleteTableData,
}
work.js
import {sqlite
} from './index.js'export default class WorkSqlite {constructor(tableName) {this.tableName = tableName}/** 初始化数据库* @param {String} tableName 表名* @param {String} sql 表结构*/initSqlite(sql = '("id" TEXT,"content" TEXT)') {return new Promise((resolve, reject) => {sqlite.openDb().then(async () => {let table = await sqlite.createTable(this.tableName, sql).catch(() => {reject(false)})if (table) {resolve(true)} else {reject(false)}})})}/** 插入单条数据* @param {String} tableName 表名* @param {Object} data 数据*/insertData(data) {let keys = Object.keys(data)let values = Object.values(data)let sql =`INSERT INTO ${this.tableName} (${keys.join(',')}) VALUES (${values.map((item) => `'${item}'`).join(',')})`return sqlite.insertData(sql)}/** 查询数据* @param {String} tableName 表名*/selectData() {return sqlite.selectData(this.tableName)}/** 删除表数据*/deleteTableData(where = null) {return sqlite.deleteTableData(this.tableName, where)}/** 删除表*/deleteTable(tableName) {return sqlite.deleteTable(tableName)}closeDb() {return sqlite.closeDb()}/** 查询所有表*/getTable() {return sqlite.getTable()}/** 批量插入数据* @param {String} tableName 表名* @param {Object} data 数据*/insertBatchData(data) {if (!Array.isArray(data) || !data?.length) {console.log('插入数据必须是数组')return}let sql = []data.forEach((item) => {let keys = Object.keys(item)let values = Object.values(item)sql.push(`INSERT INTO ${this.tableName} (${keys.join(',')}) VALUES (${values.map((item) => `'${item}'`).join(',')})`)})return sqlite.insertData(sql)}/** 判断数据库是否连接* @param {String} tableName 表名*/async isConnect() {let open = sqlite.isOpen()if (!open) {return false}let table = await sqlite.isTable(this.tableName)if (!table) {return false}return true}}
使用示例:
import WorkSqlite from '@/sqlite/work.js';
export default {data(){return {workPending: null,workRuning: null}},onLoad(e) {// 初始化待处理任务数据库链接,传入的是表名,需要几个表就new 几个。this.workPending = new WorkSqlite('workPending');this.workRuning = new WorkSqlite('workRuning');},
}
修改表设计需要自己传入sql语法,initSqlite时传入sql语句即可自定义表设计。

默认支持数据批量插入,表字段只有 id 和 content

最后如果sqlite 没生效,可能需要打自定义基座。sqlite 只适合app,H5不支持!
相关文章:
uni-app集成sqlite
Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…...
策略模式环境类的实现方式对比
文章目录 1、策略模式2、聚合策略类实现方式一3、聚合策略类实现方式二4、对比5、补充:ApplicationContextAware接口 1、策略模式 近期工作中,需要处理4.x和5.x两个版本的数据,所以自然想到的是策略模式,写一个抽象类,…...
Node.js 登录鉴权
目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...
【c++】【线程池】固定式线程池(FixedThreadPool)
【c】【线程池】固定式线程池(FixedThreadPool) 1属性 1.1 Task可调用对象 使用 function 包装器和using类型重命名 设置一个Task的可调用对象(可理解为函数指针) 这个Task也就是我们的任务 using Task std::function<void(void)>;定义了一个…...
高可用、高性能、负载均衡集群的区别
维度高可用集群高性能集群负载均衡集群核心目标服务持续可用,减少停机加速计算任务,提升处理能力请求分发算法、健康检查关键技术冗余、心跳检测、鼓掌转移并行计算、高速网络、分布式存储请求分发算法、健康检查典型应用数据库主从切换、关键业务系统科…...
Docker 与 Serverless(无服务器架构)
Serverless(无服务器架构) 是一种新的云计算架构,它通过让开发者专注于业务逻辑而无需管理服务器基础设施,来简化应用的开发和部署。Serverless 模型通常由云服务提供商管理基础设施的所有方面,而开发者只需提供代码和…...
mac 下 java 调用 gurobi 不能加载 jar
在 mac 电脑中的 java 始终不能加载 gurobi 的 jar 包,java 的开发软件 eclipse,idea 总是显示找不到 gurobi 的 jar 包,但是 jar 包明明就在那里。 摸索了三个小时,最后发现原因竟然是: jar 包太新,替换…...
halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization
目录 一、remove_bin_for_3d_object_localization代码第一部分二、remove_bin_for_3d_object_localization代码第二部分三、效果图一、remove_bin_for_3d_object_localization代码第一部分 1、读图构建3D模型。 2、一次二值化选取区域。 3、一次和背景差值选取区域。 4、在二维…...
Python 编程题 第二节:组合数字、乘法口诀表、水仙花数、反向输出四位数、判断三角形
组合数字 1-4不重复组成三位数,利用集合的去重 lst[] for i in range(1,5):for j in range(1,5):for m in range(1,5):s{i,j,m}if len(s)3:lst.append(i*100j*10m) print(lst) 乘法口诀表 修改换行符 for i in range(1,10):for j in range(1,i1):print(f"…...
【HTML— 快速入门】HTML 基础
准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器,我们在写前端代码时,使用 Sublime Text 打开比使用记事本打开,得到的代码体验更好,比 vscode…...
【MATLAB中的图像数据结构】
MATLAB中的图像数据结构 目录 MATLAB中的图像数据结构目标 :知识点 :1. 图像的存储方式 :2. 图像的颜色空间 :3. 图像的像素操作 : 示例代码 :1. 读取和显示图像 :2. 查看图像信息 :…...
在线抽奖系统——项目介绍
目录 项目介绍 页面预览 需求分析 管理员登录注册 人员模块 奖品模块 活动模块 抽奖模块 系统设计 系统架构 项目环境 数据库设计 安全设计 完整代码:项目完整代码/在线抽奖系统/lottery-system Echo/project - 码云 - 开源中国 项目介绍 利用 MySQ…...
day7作业
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击(Atx),防御(Defense),速度(Speed),生命值(Blood),以及所有的set get 方…...
JavaScript 系列之:Ajax、Promise、Axios
前言 同步:会阻塞。同步代码按照编写的顺序逐行依次执行,只有当前的任务完成后,才会执行下一个任务。 异步:异步代码不会阻塞后续代码的执行。当遇到异步操作时,JavaScript 会将该操作放入任务队列中,继续…...
AI人工智能机器学习之神经网络
1、概要 本篇学习AI人工智能机器学习之神经网络,以MLPClassifier和MLPRegressor为例,从代码层面讲述最常用的神经网络模型MLP。 2、神经网络 - 简介 在 Scikit-learn 中,神经网络是通过 sklearn.neural_network 模块提供的。最常用的神经网…...
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)
鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar) 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…...
FreeRTOS动态任务和静态任务创建
一.动态任务创建 1.搭建任务框架 去task.c中将任务参数复制到main中 然后将const去掉,它会限制参数类型,任务大小、任务优先级、任务句柄需要去宏定义,任务句柄是指针类型要取地址 vTaskStartScheduler(); //开启任务调度,.c…...
QT:Graphics View的坐标系介绍
在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…...
C# httpclient 和 Flurl.Http 的测试
关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站,可以测试Post调用,我写了2个函数,测试httpclient和Flurl使用Post: async 和 await 是成对使用的,为了接受web异步返回的数据,winfor…...
精选案例展 | 智己汽车—全栈可观测驱动智能化运营与成本优化
本案例为“观测先锋 2024 可观测平台创新应用案例大赛”精选案例,同时荣获IT168“2024技术卓越奖评选-年度创新解决方案”奖。 项目背景 近年来,中国汽车行业进入转型升级阶段,智能网联技术成为行业发展的核心。车联网、自动驾驶等技术的加速…...
阿里云可观测全面拥抱 OpenTelemetry 社区
作者:古琦 在云计算、微服务、容器化等技术重塑 IT 架构的今天,系统复杂度呈指数级增长。在此背景下,开源可观测性技术已从辅助工具演变为现代 IT 系统的"数字神经系统",为企业提供故障预警、性能优化和成本治理的全方…...
剑指 Offer II 032. 有效的变位词
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20032.%20%E6%9C%89%E6%95%88%E7%9A%84%E5%8F%98%E4%BD%8D%E8%AF%8D/README.md 剑指 Offer II 032. 有效的变位词 题目描述 给定两个字符串 s 和 t ,…...
AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2
密接牛追踪2 农夫约翰有 N 头奶牛排成一排,从左到右依次编号为 1∼N。 不幸的是,有一种传染病正在蔓延。 最开始时,只有一部分奶牛受到感染。 每经过一个晚上,受感染的牛就会将病毒传染给它左右两侧的牛(如果有的话…...
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法 一 系统环境二 使用场景三 操作步骤 一 系统环境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…...
山大软院ai导论实验之采用BP神经网络分类MNIST数据集
目录 实验代码 实验内容 实验代码 import matplotlib.pyplot as plt from matplotlib import font_manager import torch from torch.utils.data import DataLoader import torchvision from torchvision import transforms# 数据预处理 transform transforms.Compose([tra…...
threeJs+vue 轻松切换几何体贴图
嗨,我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下,手头上正好有个在线3D家具商店,用户不仅可以看到产品的静态图片,还能实时更换沙发的颜色或材质,获得真实的购物体验。…...
【python】01_写在前面的话
又是爆肝干文的日子,继上次说要出一期Python新手入门教程系列文章后,就在不停地整理和码字,终于是把【基础入门】这一块给写出来了。 不积跬步无以至千里,不积小流无以成江海,一个一个板块的知识积累,早晚你…...
跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)
飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案: 一、背景痛点与解决方案 在技术文档创作中,数学公式的跨平台渲染一直存在三大痛点: 飞书云文档:原生KaTeX渲染与导出功能存在语法限制微软Word:Math…...
【Python爬虫(85)】联邦学习:爬虫数据协作的隐私保护新范式
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
深入理解 并查集LRUCaChe
并查集&LRUCaChe 个人主页:顾漂亮 文章专栏:Java数据结构 1.并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后根据一定规律将归于同一组元素的…...


