第四章 Electron|Node 使用SQLite3数据库

news2024/9/24 21:17:05

一、SQLite是什么 👇 👇 👇

SQLite是一种嵌入式关系型数据库管理系统,是一个零配置、无服务器的、自给自足的、事务性的SQL数据库引擎。SQLite是一个轻量级的数据库,可以在各种操作系统上使用,并且支持SQL语言标准。

二、SQLite可以做什么 👇 👇 👇

SQLite可以用来存储和管理大量的数据,并且可以通过SQL语句来查询和操作这些数据。它可以用于移动应用程序、桌面应用程序、Web应用程序、嵌入式系统等等。

三、为什么使用它 👇 👇 👇

轻量级:SQLite非常小巧,不需要额外的服务器或运行时环境,只需一个库文件即可。

高性能:SQLite是非常快速的,因为它是一个本地库,可以直接读写磁盘文件。

可移植性:SQLite可以在多种操作系统上运行,包括Windows、Linux、macOS等等。

安全性:SQLite支持数据加密和用户身份验证等安全特性。

易于使用:SQLite的API简单易用,可以通过多种编程语言进行访问。

四、安装依赖 👇 👇 👇

安装依赖的话记得要把项目停掉

我当前的node版本号

yarn add sqlite3 --build-from-source

# 如果执行上面的语句没有安装成功再执行下面的试试
# 如果都失败,多尝试几次就好

yarn add sqlite3 --ignore-scripts

我安装的sqlite3版本

五、创建数据库👇 👇 👇

1、编写数据启动脚本👇 👇 👇

新建文件electron/db/database.ts,在electron下创建db文件夹,随后在其文件夹下创建database.ts。里面我通过开发环境来判断应该存放的位置。因为我们项目打包以后和开发的文件夹路径是不一样的。示例中数据库的名字叫Etc.End,以.db为后缀。名字根据自己的需求调整。

/**
 * @Description: 数据库连接
 * @Author: Etc.End
 * @CreationDate 2023-06-01 22:53:59
 */

const sqlite3 = require('sqlite3')
const NODE_ENV = process.env.NODE_ENV
const path = require('path')
const { app } = require('electron')
let DB_PATH = path.join(app.getAppPath(), '/config/Etc.End.db');
if (NODE_ENV !== 'development') {
    DB_PATH = path.join(path.dirname(app.getPath('exe')), '/config/Etc.End.db');
}
/**
 * @Description: 连接数据库
 * @CreationDate 2023-05-10 13:48:41
 */
function connectDatabase() {
    return new sqlite3.Database(DB_PATH, (err) => {
        if (err) {
            console.error('--------------------connectDatabaseErr' + err.message);
        }
        console.log('👉👉👉-----------------sqlite3已经连接成功')
    });
}

const db = connectDatabase();

/**
 * @Description: 创建数据库,如果用户本地没有数据库的话就创建否则跳过
 * @CreationDate 2023-05-10 13:44:48
 */
function createDataTable() {
    /**
     * @Description: 创建用户表
     * @CreationDate 2023-06-01 22:53:23
     */

    db.serialize(function() {
        db.run('create table if not exists user (id INTEGER PRIMARY KEY AUTOINCREMENT, name text, email text, phone text);');
    });
    // db.close();
}

exports.connectDatabase = connectDatabase;
exports.createDataTable = createDataTable;
exports.db = db;

2、启动脚本,创建数据库👇 👇 👇

接着在electron文件夹下的main.ts中调用createDataTable方法,编写完成以后启动程序。

启动以后控制台会输出👉👉👉-----------------sqlite3已经连接成功并且创建config文件夹以及Etc.End.db文件。

如上图一样执行成功以后我们可以通过navcat工具进行数据库的访问。

到这里我们的数据库以及表就已经创建完成了。

六、操作表👇 👇 👇

操作表的话就是拼接我们的sql,非常的简单。

const { db } = require('./database.ts')

// 查询
function query() {
    return new Promise((resolve, reject) => {
        db.all('SELECT * FROM user', (err, rows) => {
            if (err) {
                reject(err);
            } else {
                resolve(rows);
            }
        });
    });
}

// 新增
function add(data) {
    return new Promise((resolve, reject) => {
        db.run(
            `INSERT INTO user(name, email, phone) VALUES('${data.name}', '${data.email}', '${data.phone}')`,
            function (err) {
                if (err) {
                    reject(err);
                } else {
                    resolve(this.lastID);
                }
            }
        );
    });
}

我是Etc.End。如果文章对你有所帮助,能否帮我点个免费的赞和收藏😍。

 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇

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

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

相关文章

网络名词术语解析 | 路由、交换机、集线器、半/全双工、DNS、LAN、WAN、端口、MTU

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

Python 数据可视化

Python 数据可视化 Python提供了多个用于数据可视化的工具和库。其中最常用的包括: 1. Matplotlib:Matplotlib 是一个用于绘制二维图形的 Python 库。它提供了广泛的绘图选项,可以帮助您创建线图、散点图、柱状图、饼图、等高线图、3D 图形…

linuxOPS基础_linux网络配置

ifconfig查看网络信息 命令:ifconfig 作用:获取网卡的相关信息 语法:# ifconfig 示例1 查看网络信息 案例1使用ifconfig查看linux网络配置 ifconfig注意,我们发现当前ens33看不到IP地址信息,那是因为网卡默认不启…

如何为您的企业培养社交媒体粉丝(16种方式)

增加社交媒体关注度似乎很困难,但这对各种规模的企业来说都是一项重要任务。通过正确的方法,可以吸引忠实的追随者并在社交媒体上建立强大的影响力。在本文中,我们将探讨 16 种有效的方法来增加您的社交媒体粉丝并与您的受众互动。 目录 为…

Java实现LL1语法分析器【编译原理】

java通过预测分析法实现语法分析程序【编译原理】 前言推荐实验要求需知LL1工作原理 Java实现LL1语法分析器0实验步骤LL1.javaGrammar.javaLeftRecursion.javaFirstAndFollow.javaAnalyzeTable.javaLL1Stack.java实验结果 Java实现LL1语法分析器1Grammar.javaProduction.javaFi…

Three.js——九、纹理贴图、纹理对象阵列、地面网格辅助观察、UV坐标以及动画

创建纹理贴图 const geometry new THREE.PlaneGeometry(100, 100); //纹理贴图加载器TextureLoader const texLoader new THREE.TextureLoader(); // .load()方法加载图像,返回一个纹理对象Texture const texture texLoader.load(new URL(../assets/img/zhizhen…

IRIS75 DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

B站恰饭视频汇总,如何查找不同行业的品牌商单和恰饭视频?

随着“短视频时代”来临,广告主都在重点布局短视频平台,尝试用长短视频平台协同投放的方式来提高广告点击率。B站作为短视频产出的高质量平台,也是许多年轻人活跃的聚焦地,拥有很强的用户粘性和无限的商业潜力,是广告主…

港联证券|如何抓住牛股?股票为什么能够连续涨停?

牛股是指在股票市场中表现出色、股价涨幅较大的个股,对于投资者来说,抓住牛股是实现投资目标的关键之一。那么如何抓住牛股?股票为什么能够连续涨停?港联证券也为大家准备了相关内容,以供参考。 如何抓住牛股&#xff…

迅为RK3568开发板Buildroot 系统设置屏幕旋转

迅为支持的触摸屏幕有四种: MIPI 7 寸屏幕(默认物理屏幕为竖屏) LVDS 7 寸屏幕(默认物理屏幕为竖屏) LVDS 10.1 寸 1024*600 屏幕(默认物理屏幕为横屏) LVDS 10.1 寸 1280*800 屏幕&#xf…

代码随想录二刷 day13 | 栈与队列 之 239. 滑动窗口最大值 347.前 K 个高频元素

day13 239. 滑动窗口最大值347.前 K 个高频元素 239. 滑动窗口最大值 题目链接 解题思路: 设计单调队列的时候,pop和push操作要保持如下规则: pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹…

拜登签字了

* * * 原创:刘教链 * * * 号外:今天在“刘教链Pro”发表了一篇《对PoS的链重建攻击》,总结了一下最近关于PoW和PoS安全性的碰撞,抛砖引玉,欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币仍在27k上方盘旋。盘旋之中微…

数据万象 | AIGC 存储内容安全解决方案

AIGC(人工智能生产内容) 已经成为与PGC(专业生产内容)、UGC(用户生产内容)并驾齐驱的内容生产方式。由于 AI 的特性,AIGC在创意、个性化、生产效率等方面具有独特的优势,这些优势可以…

Hadoop中MapReduce概述

MapReduce概述 MapReduce定义MapReduce优缺点MapReduce核心思想MapReduce进程MapReduce编程规范MapTask并行度决定机制ReduceTask并行度决定机制mapreduce中job的提交流程MapReduce工作流程shuffle机制分区partition数据清洗(ETL)进一步分析MapTask和Red…

项目经理如何制定工作计划?做到这3点就够了

工作计划的重要性在于明确目标和实现具体步骤,协调大家一致行动,增强工作的主动性,减少工作的盲目性,让工作有条不紊地进行。同时,制定计划也可以对工作进度和质量有个保证和标准,对大家的工作有约束和督促…

Android Native crash问题分析

1、准备材料 android-ndk-r21b工具:addr2line和objdump工具。 .so库:crash对应的带符号表的共享库 源代码code:crash对应的源码文件 tombstone:Android系统产生的墓碑文件 2、 tombstone墓碑文件分析 关键信息: c…

前端div水平居中的几种实现方式

借助display布局 父元素开启display:flex布局,并设置justify-content:center主轴的空隙分布 因为是单行,所以使用align-items:center设置侧轴上的对其方式 <body><style>.a{width: 200px;height: 200px;background-color: red;display: flex;justify-content: c…

JS新标签页打开,让你的网站访问更加便捷

前言 大家在浏览网页时&#xff0c;常常需要在新的标签页中打开链接&#xff0c;以便在不离开当前页面的情况下查看其他内容。其中&#xff0c;JS 打开新标签页作为一种常用的功能之一&#xff0c;既可以方便用户快速访问相关链接&#xff0c;又能有效提升网站的用户体验。在本…

【Python 二进制和十六进制】零基础也能轻松掌握的学习路线与参考资料

1.了解二进制和十六进制的基本概念和用途 在计算机中&#xff0c;二进制和十六进制是两种常用的表示数据的方式。二进制只有两个数字0和1&#xff0c;表示一个比特&#xff08;bit&#xff09;&#xff0c;在实际的计算机程序中&#xff0c;常用八个比特表示一个字节&#xff…

如何在 JavaScript 中创建自定义警告框

本文将介绍如何使用 jQuery UI、SweetAlert2 和自定义警报功能在 JavaScript 中创建自定义警报框。 使用 jQuery UI 创建自定义警告框 我们可以使用 jQuery UI 来模仿 JavaScript 本机 alert() 函数的功能。 尽管 jQuery UI 有很多 API&#xff0c;您可以使用它的 dialog() AP…