Electron试用 SQLite

在客户端开发中,无论是 PC 端,还是手机端,为了能够访问离线数据,数据经常需要保存到本地,IndexDB 可以用于存储本地数据,IndexDB 是一个对象存储,数据是以 key:value 的形式进行存储和访问的,相对于关系型数据库,访问速度快,但是结构简单。对于一些复杂的模型,多表关联关系,用 IndexDB 实现会相对复杂,需要通过查询实现。所以在业务项目中,通过关系型数据库对业务数据进行建模,采用 SQL进行数据访问更加方便。

SQLite是客户端常用的文件型关系数据库,主流的移动端、桌面应用大多使用的 SQLite进行离线数据存储,例如微信。SQLite 是一个轻量级基于文件关系型数据库,主要有以下特点:

  • 支持标准 SQL
  • 文件无需服务器支持
  • 跨平台,Android、IOS、PC(Windows、Mac、Linux)
  • 不需要任何配置,安装上依赖直接可以使用

安装,默认 SQLite 是x86 编译的,在Mac M1 上试用会报错,所以我们需要对 SQLLite 进行重新编译。

npm install sqlite3 --build-from-source --target_arch=arm64 --fallback-to-build

Electron + SQLite 创建用户的例子:
index.html

<!DOCTYPE html>
<html>
<head><title>Electron SQLite CRUD</title>
</head>
<body><h1>User Management</h1><input id="username" type="text" placeholder="Username"><input id="age" type="number" placeholder="Age"><button onclick="createUser()">Create User</button><button onclick="getUsers()">Load Users</button><div id="users"></div><script>function createUser() {const username = document.getElementById('username').value;const age = document.getElementById('age').value;window.api.createUser(username, parseInt(age)); #进程间互相调用}async function getUsers() {const users = await window.api.getUsers();const usersDiv = document.getElementById('users');usersDiv.innerHTML = users.map(user => `<p>${user.username}, ${user.age} years old</p>`).join('');}</script>
</body>
</html>

main.js 主线程

const { ipcMain, app, BrowserWindow } = require('electron');
const path = require('path');
const sqlite3 = require('sqlite3').verbose();function createWindow() {const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),}});mainWindow.loadFile('index.html');
}app.whenReady().then(createWindow);app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
});app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createWindow();}
});const db = new sqlite3.Database('userdata.db', (err) => {if (err) {console.error(err.message);}console.log('Connected to the userdata database.');db.run(`CREATE TABLE IF NOT EXISTS tb_user (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT,age INTEGER)`);
});ipcMain.on('create-user', (event, username, age) => {db.run(`INSERT INTO tb_user(username, age) VALUES(?, ?)`, [username, age]);
});ipcMain.handle('get-users', async (event) => {return new Promise((resolve, reject) => {db.all(`SELECT * FROM tb_user`, [], (err, rows) => {if (err) {reject(err);}resolve(rows);});});
});ipcMain.on('update-user', (event, id, username, age) => {db.run(`UPDATE tb_user SET username = ?, age = ? WHERE id = ?`, [username, age, id]);
});ipcMain.on('delete-user', (event, id) => {db.run(`DELETE FROM tb_user WHERE id = ?`, id);
});

IPC API

const { contextBridge, ipcRenderer } = require('electron');contextBridge.exposeInMainWorld('api', {createUser: (username, age) => ipcRenderer.send('create-user', username, age),getUsers: () => ipcRenderer.invoke('get-users'),updateUser: (id, username, age) => ipcRenderer.send('update-user', id, username, age),deleteUser: (id) => ipcRenderer.send('delete-user', id)}
);

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

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

相关文章

117篇 | 3D Gaussian Splatting论文

本论文集划分为4个部分&#xff1a;综述&基础&#xff08;14篇&#xff09;、NeRF在AIGC&#xff08;54篇&#xff09;、NeRF在SLAM&#xff08;自动驾驶&#xff09;&#xff08;25篇&#xff09;、NeRF之场景建模&#xff08;25篇&#xff09; https://t.zsxq.com/3ATyE…

【UnityRPG游戏制作】NPC交互逻辑、动玩法

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

R语言数据探索与分析-运用时间序列预测模型对成都市API进行预测分析

一、研究背景 “绿水青山就是金山银山&#xff0c;要让绿水青山变成金山银山”让人们深刻的意识到环境的重要性。与此同时&#xff0c;由于现代生活水平的不断提高&#xff0c;所带来的环境污染也不断增多&#xff0c;空气以及环境的污染带来了越来越多的疾病&#xff0c;深刻…

vue2项目webpack3.x打包文件分割优化加载

vue2项目webpack3.x打包文件分割优化加载 0. 项目目录和依赖信息1. 开启 gzip&#xff08;建议&#xff09;2. vue2项目配置懒加载&#xff08;建议&#xff09;3. 拆分 vendor 包注意&#xff1a;webpack3使用CommonsChunkPlugin实现 本文使用 3 种方案进行叠加优化 优先级按以…

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

《R语言与农业数据统计分析及建模》学习——并行计算

1、并行计算概念 并行计算是指同时使用多种计算资源解决计算问题的过程。 R语言是一个单线程的程序。在现代多核心处理器上&#xff0c;R无法有效利用所有计算内核。 当下时代&#xff0c;我们需要处理的数据量日渐增大&#xff0c;R的计算模式限制了R处理大规模数据的能力。 …

39 死锁

目录 1.死锁 2.线程同步 3.条件变量 4.案例 死锁 概念 死锁是指在一组进程中的各个进程均占有不会释放的资源&#xff0c;但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态 四个必要条件 互斥条件&#xff1a;一个资源每次只能被一个执行流使用 请求…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

tomcat打开乱码修改端口

将UTF-8改成GBK 如果端口冲突&#xff0c;需要修改tomcat的端口

电脑找不到msvcp140.dll如何修复?msvcp140.dll丢失的多种解决方法分享

在日常电脑操作过程中&#xff0c;用户可能会遇到一个令人困扰的问题&#xff0c;即屏幕上突然弹出一条错误提示&#xff1a;“由于找不到msvcp140.dll&#xff0c;无法继续执行代码”。这一情况往往导致应用程序无法正常启动或运行&#xff0c;给工作和娱乐带来不便。不过&…

ps科研常用操作,制作模式图 扣取想要的内容元素photoshop

复制想要copy的图片&#xff0c; 打开ps---file-----new &#xff0c;ctrolv粘贴图片进入ps 选择魔棒工具&#xff0c;点击想要去除的白色区域 然后&#xff0c;cotrol shift i&#xff0c;反选&#xff0c; ctrol shiftj复制&#xff0c;复制成功之后&#xff0c;一定要改…

Vitis HLS 学习笔记--HLS眼中的完美循环嵌套

目录 1. 简介 2. 示例 2.1 不完美循环 2.2 完美循环 2.3 HLS 眼中的循环 3. 总结 1. 简介 在处理嵌套循环时&#xff08;HDL或HLS工具中&#xff09;&#xff0c;优化循环结构对于实现最佳性能至关重要。嵌套循环的性能优化直接影响着计算的时延和资源利用率。创建完美嵌…

【React】Redux Toolkit的使用

Redux toolkit使用 1. 背景2.文档3. 使用3.1 安装3.2 创建入口文件 redux3.3 redux/index.js3.4 redux/reducer.js3.5 使用示例 1. 背景 Redux Toolkit 出现的背景可以追溯到对 Redux 的使用和开发中出现的一些常见模式和问题。Redux 是一个非常强大的状态管理库&#xff0c;但…

挑战谷歌巨头地位?消息称OpenAI于5月9日发布ChatGPT版搜索引擎 | 最新快讯

来源&#xff1a; IT 之家 5 月 3 日消息&#xff0c;谷歌 Gemini 和微软 Copilot 之间的 AI 大战继续升级&#xff0c;最新消息称 OpenAI 有望今年 5 月 9 日推出基于 ChatGPT 的全新搜索产品&#xff0c;进一步挑战谷歌的传统搜索巨头地位。 Reddit 网友近日发帖&#xff0c;…

JavaFX 动态加载目录下所有WAV文件并逐个播放

在JavaFX中动态加载一个目录下的所有.wav文件并逐个播放&#xff0c;你可以使用java.nio.file包来遍历目录&#xff0c;并使用javax.sound.sampled包来播放音频文件。不过&#xff0c;需要注意的是&#xff0c;JavaFX本身并不直接支持音频播放&#xff0c;但你可以使用Java的标…

Go实现网页 临时电脑目录访问

简介 下载好电影电视剧但是又不想呆在电脑旁边&#xff0c; 你可能只需要开启一个Go服务&#xff0c; 简单几句代码....实现 中间件 做一个简单的包装器&#xff0c; 用于处理所有外部访问。 IP过滤器 过滤IP&#xff0c; 对不符合的IP进行过滤 步骤 代码 IP过滤器 filt…

Stable Diffusion学习线路,提示词及资源分享

1. 提示词的基础概念 提示词分为正面提示词&#xff08;Prompts&#xff09;和反面提示词&#xff08;Negative Prompts&#xff09;。正面提示词代表你希望画面中出现的内容&#xff0c;而反面提示词代表你不希望画面中出现的内容。提示词通常是以英文书写&#xff0c;最小单…

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相应的CPU资源…

逻辑回归实战 -- 是否通过考试

http://链接: https://pan.baidu.com/s/1-uy-69rkc4WjMpPj6iRDDw 提取码: e69y 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 数据集下载链接 这是个二分类问题&#xff0c;通过x1,x2两个指标得出是否通过考试的结论。 逻辑回归的激活函数是sigmoid函数&…

数学符号的标准写法 (机器学习方向)

摘要: 本贴讨论数学符号的标准写法, 列出 Latex 中使用的命令. 表 1. 矩阵相关符号 符号/操作意义Latex 命令 A \mathbf{A} A矩阵\mathbf{A} A i \mathbf{A}_{i} Ai​带下标的矩阵, 注意不是矩阵的元素 (entry)\mathbf{A}_{i} A i j \mathbf{A}_{ij} Aij​带双下标的矩阵矩阵\m…