在 electron+vite+vue3+express 项目中使用better-sqlite3

文章目录

      • 一、安装 electron-rebuild 和 better-sqlite3
      • 二、使用 electron-rebuild 重建 Node.js 模块
      • 三、better-sqlite3 的基本使用
      • 四、打包
      • 五、参考资料

一、安装 electron-rebuild 和 better-sqlite3

yarn add -D electron-rebuild
yarn add better-sqlite3

Electron 内置的 Node.js 版本和编译到 better-sqlite3 的 Node.js 版本不同将可能导致安装失败,所以此处需要安装 electron-rebuild 重建 Node.js 模块。(注意安装顺序,否则可能出现安装失败的问题)

二、使用 electron-rebuild 重建 Node.js 模块

如果安装完 better-sqlite3 不重建直接运行,则可能出现以下报错:

Error: The module 'xxx'
was compiled against a different Node.js version using
NODE_MODULE_VERSION xxx. This version of Node.js requires
NODE_MODULE_VERSION xxx. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).

修改 package.json 文件中的 scripts 内容:

  "scripts": {"dev": "vite",..."rebuild": "electron-rebuild -f -w better-sqlite3"},

执行命令:yarn run rebuild 重建 Node.js 版本。

三、better-sqlite3 的基本使用

新建 db/DBManager.ts 文件:

const sqliteDB = require('better-sqlite3');
const path = require('path');const dbPath = process.env.NODE_ENV === "development" ? "./wallpapers.db" : path.join(process.resourcesPath, "./wallpapers.db")// 打开数据库,如果不存在则创建,cacheSize 缓存数据最大值
const db = new sqliteDB(dbPath,{ cacheSize: 15 });
db.pragma('journal_mode = WAL');exports.db = db;

新建 db/ImageManager.ts 文件:

const dbmgr = require("./DBManager.ts");
const db = dbmgr.db;// 读取信息
const readAllImgs = () => {try {const result = db.prepare("SELECT * FROM imgs", { cached: true }).all();return result;} catch (error) {console.error(error);throw error;}
};// 批量插入数据 (values 是一个对象)
const insertWallhaven = (keys, values) => {try {// 使用命名参数 例: $id、$url ... ; 数据 values => [{id: xx, url: xx},{}]// 由于插入的数据 id 可能重复,所以此处使用 OR IGNOREconst insertQuery = db.prepare(`INSERT OR IGNORE INTO wallhaven (${keys.join(",")}) VALUES (${keys.map((item) => "$" + item).join(",")})`);const insertMany = db.transaction((values) => {for (const val of values) {insertQuery.run(val)}});insertMany(values);} catch (error) {console.error(error);throw error;}
};module.exports = {readWallhaven,insertWallhaven,
};

四、打包

修改 electron-builder.json5 文件,添加打包配置:

  "directories": {...},// 添加数据库文件"extraResources": ["./wallpapers.db"],

将数据库文件放在根目录下:

将数据库文件放在根目录下


说明: 后续在使用过程中发现,每次安装新的第三方库时都需要重新执行 yarn run rebuild 命令重建 Node.js 模块,否则可能出现报错。

五、参考资料

  • https://dev.to/arindam1997007/a-step-by-step-guide-to-integrating-better-sqlite3-with-electron-js-app-using-create-react-app-3k16

  • https://www.camelgeek.net/117.html

  • https://github.com/WiseLibs/better-sqlite3

  • https://www.electronjs.org/zh/docs/latest/tutorial/using-native-node-modules

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

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

相关文章

解决onlyoffice无法重命名的问题

当前的问题: 返回的是 error:1,根据官方文档的解释,这个是文档的key是错误的。 参考官方文档:https://api.onlyoffice.com/zh/editors/command 解决思路:看有没有什么事件,能够携带文档的key…

无人机图像目标检测

本仓库是人工智能课程的课程作业仓库,主要是完成无人机图像目标检测的任务,我们对visdrone数据集进行了处理,在yolo和ssd两种框架下进行了训练和测试,并编写demo用于实时的无人机图像目标检测。 requirements依赖: ss…

01- 收入数据集【Pytorch入门实战】

目录 一、机器学习基础 二、实战例子 1.数据集分析 2.实战训练 3.总结 三、参考资料 一、机器学习基础 为了解决这个问题,人们想到数据驱动方法,也就是让计算机从现有的大量的带标签图片电学习规律,一旦计算机学习到了其中的规律&…

LLM量化--AWQ论文阅读笔记

写在前面:近来大模型十分火爆,所以最近开启了一波对大模型推理优化论文的阅读,下面是自己的阅读笔记,里面对文章的理解并不全面,只将自己认为比较重要的部分摘了出来,详读的大家可以参看原文 原论文地址&am…

PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决一、并发插入和唯一约束的基本概念&#xf…

微服务实战系列之玩转Docker(一)

前言 话说计算机的“小型化”发展,历经了大型机、中型机直至微型机,贯穿了整个20世纪的下半叶。同样,伴随着计算机的各个发展阶段,如何做到“资源共享、资源节约”,也一直是一代又一代计算机人的不懈追求和历史使命。今…

bash: ip: command not found

输入: ip addr 报错: bash: ip: command not found 报错解释: 这个错误表明在Docker容器中尝试执行ip addr命令时,找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…

HTTP背后的故事:理解现代网络如何工作的关键(二)

一.认识请求方法(method) 1.GET方法 请求体中的首行包括:方法,URL,版本号 方法描述的是这次请求,是具体去做什么 GET方法: 1.GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源。 2.在浏览器中直接输入 UR…

算法 —— 快速幂

目录 P1045 [NOIP2003 普及组] 麦森数 P1226 【模板】快速幂 原理I 原理II P1226 代码解析 P1045 代码解析 P1045 [NOIP2003 普及组] 麦森数 本题来自洛谷:P1045 [NOIP2003 普及组] 麦森数,根据题意,我们可以看到本题需要计算最少2的1…

C语言程序设计实验8实验报告

1.实验目的 (1)掌握循环语句 (2)学习使用递归 (3)学习使用程序调试 2.实验内容、算法、流程图及主要符号说明 (1)用辗转相减求最大公约数的递归定义是&a…

基于JAVA的智慧社区信息管理系统设计

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【Android高级UI】PorterDuffMode颜色混合公式

效果展示 色彩混合公式 参数说明 S,源图形D,目标图形A,透明度C,RGB色Saturate,饱和度

PingRAT:一款基于ICMP的隐蔽型C2流量转发工具

关于PingRAT PingRAT是一款基于ICMP的隐蔽型C2流量转发工具,该工具专为红队成员和攻防演练任务而设计,主要利用了ICMP Payload来实现其功能,该工具不仅能转发C2流量,而且还可以帮助广大研究人员增强C2网络通信流量传输的隐蔽性。…

SWDIO管脚作为GPIO

下面是使用FRDM-K32L2B3开发板和SDK中的frdmk32l2b_gpio_led_output程序做了一些测试,configure SWDIO pin as GPIO pin的流程。 查看手册,找到SWDIO对应的管脚,可以看到PTA3对应的SWDIO管脚。 2.修改Demo程序,在程序中设置SWDIO…

【杰理蓝牙开发】AC632 开发板烧录实例

AC632 开发板烧录实例 0. 个人简介 && 授权须知1. 硬件板卡介绍2. 代码烧录2.1 使用USB接口烧录2.2 使用串口烧录 3. 为什么要用烧录器供电? 0. 个人简介 && 授权须知 📋 个人简介 💖 作者简介:大家好&#xff0c…

代码随想录训练营第三十六天 1049最后一块石头的重量II 494目标和

第一题: 原题链接:1049. 最后一块石头的重量 II - 力扣(LeetCode) 思路: 首先确认这是一道01背包问题的题目,如何转换:剩下尽可能小的重量,如何剩下呢?跟分割等和子集很…

论文略读:LoRA Learns Less and Forgets Less

202405 arxiv 1 主要思想 LORA相比于全参数训练,学的少,但忘的也少 2 实验分析 2.1 训练的表现 在编程和数学任务中,LoRA相比全参数微调表现出明显的劣势 2.2 遗忘的表现 这边的遗忘,是指在数据集A上预训练,然后在…

18.x86游戏实战-找角色人物名字

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Linux编程乐趣《简单、有趣、好玩的Linux命令》

文章目录 一、黑客帝国(cmatrix)1.1 centOS 手动安装:1.2 . 运行1.3 . 效果 二、cal命令三、htop四、sl:蒸汽火车五、cowsay:会说话的小牛六、boxes七、pv 一、黑客帝国(cmatrix) 1.1 centOS 手动安装: #…

【数学建模与优化】:解析与实践

目录 数学建模概述 1. 什么是数学模型 2. 数学模型的分类 2.1 按应用领域分类 2.2 按建模方法分类 2.3 按是否考虑随机因素分类 2.4 按变量的连续性分类 2.5 按对对象内部规律了解程度分类 2.6 按变量的基本关系分类 2.7 按是否考虑时间变化分类 3. 数学规划及优化模…