Electron操作SQLite數(shù)據(jù)庫(kù)
目錄
一、 背景 2
二、 數(shù)據(jù)庫(kù)選型 2
(一) LocalStorage 2
(二) SessionStorage 2
(三) WebSQL 2
(四) Cookies 2
(五) IndexedDB 3
(六) SQLite 3
三、 electron安裝SQLite3和環(huán)境配置 4
(一) 安裝python環(huán)境 5
(二) 構(gòu)建工具下載 5
(三) 開(kāi)始安裝 5
1. 方案一 5
2. 方案二 7
四、 SQLite可視化管理工具 7
(一) SQLite studio 8
(二) Sqlitespy 9
(三) Navicat for SQLite 9
五、 操作SQLite3數(shù)據(jù)庫(kù) 10
六、 參考文獻(xiàn) 12
一、 背景
在我們開(kāi)發(fā)某款應(yīng)用程序的時(shí)候,可能會(huì)需要用到本地?cái)?shù)據(jù)庫(kù),而不是一直通過(guò) restful 接口,使用遠(yuǎn)程數(shù)據(jù)庫(kù)。所以我們?cè)趹?yīng)用中需要加入數(shù)據(jù)庫(kù),究其根本就是 electron 搭配數(shù)據(jù)庫(kù)。那么,數(shù)據(jù)庫(kù)要選擇哪個(gè)呢?

二、 數(shù)據(jù)庫(kù)選型
(一) LocalStorage
LocalStorage 存儲(chǔ)的數(shù)據(jù)保存在瀏覽器中。存儲(chǔ)容量很小,大概不會(huì)超過(guò) 10M,它是以鍵值對(duì)形式保存數(shù)據(jù)的,沒(méi)有關(guān)聯(lián)查詢(xún)、條件查詢(xún)的機(jī)制。
(二) SessionStorage
SessionStorage 跟 LocalStorage 很相似,區(qū)別是每次關(guān)閉會(huì)話,其中的內(nèi)容會(huì)被清空。在窗口中打開(kāi)頁(yè)面會(huì)復(fù)制頂級(jí)瀏覽會(huì)話的上下文作為新會(huì)話的上下文。相同 url 的不同 tabs 頁(yè)面,其中的值是不同的。有過(guò)期時(shí)間設(shè)置,想持久化存儲(chǔ)數(shù)據(jù),它是做不到的。
(三) WebSQL
Web SQL 數(shù)據(jù)庫(kù) API 并不是 HTML5 規(guī)范的一部分,但是它是一個(gè)獨(dú)立的規(guī)范。WebSQL 是在瀏覽器上模擬數(shù)據(jù)庫(kù),使用 js 來(lái)操作 SQL 完成對(duì)數(shù)據(jù)的讀寫(xiě)。
(四) Cookies
Cookies 存儲(chǔ)容量太小,只能存 4kb 的內(nèi)容,而且每次與服務(wù)端交互,同域下的 Cookie 還會(huì)被攜帶到服務(wù)端,也沒(méi)有關(guān)聯(lián)查詢(xún)、條件查詢(xún)的機(jī)制。
數(shù)據(jù)以 Json 格式保存在本地文件中,以這種方式存儲(chǔ)一些用戶(hù)的配置信息是完全沒(méi)問(wèn)題的。但要用這種方式存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù),就很不合理了。主要原因是:用這種方案操作數(shù)據(jù)是需要把文件中的所有數(shù)據(jù)都加載到客戶(hù)端電腦的內(nèi)存中去的。由于沒(méi)有索引機(jī)制,關(guān)聯(lián)查詢(xún)、條件查詢(xún)等操作效率不高,更新了某項(xiàng)數(shù)據(jù)之后,要持久化更新操作,又要重寫(xiě)整個(gè)文件。
(五) IndexedDB
IndexedDB 是一種底層 API,用于在客戶(hù)端存儲(chǔ)大量的結(jié)構(gòu)化數(shù)據(jù)。該 API 使用索引實(shí)現(xiàn)對(duì)數(shù)據(jù)的高性能搜索。
IndexedDB 是一個(gè)事務(wù)型數(shù)據(jù)庫(kù)系統(tǒng),類(lèi)似于基于 SQL 的 RDBMS。然而,不像 RDBMS 使用固定列表,IndexedDB 是一個(gè)基于 js 的面向?qū)ο髷?shù)據(jù)庫(kù)。IndexedDB 可以存儲(chǔ)和檢索用鍵索引的對(duì)象。只需要指定數(shù)據(jù)庫(kù)模式,打開(kāi)與數(shù)據(jù)庫(kù)的連接,然后檢索和更新一系列事務(wù)。
(六) SQLite
官網(wǎng)地址:https://sqlite.org/index.html 。
SQLite 是一個(gè)進(jìn)程內(nèi)的庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。它是一個(gè)零配置的數(shù)據(jù)庫(kù),這意味著與其他數(shù)據(jù)庫(kù)不一樣,我們不需要在系統(tǒng)中配置。
就像其他數(shù)據(jù)庫(kù),SQLite 引擎不是一個(gè)獨(dú)立的進(jìn)程,可以按應(yīng)用程序需求進(jìn)行靜態(tài)或動(dòng)態(tài)連接。SQLite 直接訪問(wèn)其存儲(chǔ)文件。
特性:
不需要一個(gè)單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng); 一個(gè)完整的 SQLite數(shù)據(jù)庫(kù)是存儲(chǔ)在一個(gè)單一的跨平臺(tái)的磁盤(pán)文件中;SQLite是自給自足的,這意味著不需要任何外部的依賴(lài);SQLite事務(wù)是完全兼容ACID的,允許從多個(gè)進(jìn)程或線程安全訪問(wèn)。
通過(guò)比較,我們選擇了 SQLite3 作為 electron 搭配的數(shù)據(jù)庫(kù)。SQLite3 的使用和 api 可以通過(guò)菜鳥(niǎo)教程進(jìn)行學(xué)習(xí) https://www.runoob.com/sqlite/sqlite-where-clause.html 。

三、 electron安裝SQLite3和環(huán)境配置
在應(yīng)用終端中下載依賴(lài)包:
npm install sqlite3 –save-dev
啟動(dòng)應(yīng)用又提示我去安裝aws-sdk:
npm install --save aws-sdk
啟動(dòng)應(yīng)用又報(bào)如下錯(cuò)誤,真是多災(zāi)多難:

看來(lái)安裝 SQLite 沒(méi)有這么簡(jiǎn)單,還是需要做一些準(zhǔn)備工作的。比如需要 python 環(huán)境(python2.7)和vsBuildTools構(gòu)建工具(Visual Studio 15生成工具2017)。

(一) 安裝python環(huán)境
我的 python 版本:

下載地址:https://www.python.org/downloads 。下載并且安裝 python,將默認(rèn)沒(méi)有勾選的“加入系統(tǒng)變量path”的選項(xiàng)勾選上,配置好環(huán)境變量后,在終端里測(cè)試一下。
(二) 構(gòu)建工具下載
我安裝的是 Visual Studio 15生成工具2017

還需要執(zhí)行
npm install windows-build-tools –g
安裝 windows-build-tools。
(三) 開(kāi)始安裝
1. 方案一
cnpm install sqlite3@latest --build-from-source --runtime=electron --target=1.7.9 --dist-url=https://atom.io/download/electron --save
不要使用 npm。否則報(bào)錯(cuò)如下:

使用 cnpm 去安裝它。
執(zhí)行命令開(kāi)始安裝最新版的 SQLite3。

其實(shí)這個(gè)過(guò)程中,會(huì)試圖下載 SQLite3 和我指定版本的 electron 的 prebuild 版本,沒(méi)有發(fā)現(xiàn)的話。就會(huì)重新構(gòu)建一份合適的版本出來(lái)。
2. 方案二
執(zhí)行下面三條命令:
npm install sqlite3 --save
npm install electron-rebuild --save
.\node_modules\.bin\electron-rebuild.cmd
這兩個(gè)方案隨便選一條執(zhí)行,就能安裝成功。安裝成功后,就可以順利使用 SQLite。

四、 SQLite可視化管理工具
生成的數(shù)據(jù)庫(kù)并不是雙擊就能打開(kāi)預(yù)覽數(shù)據(jù),所以就需要一款可視化管理工具。SQLite 的可視化管理工具,是做 SQLite 相關(guān)開(kāi)發(fā)的必備軟件。對(duì)于可視化管理工具,并不像 mysql 一樣,SQLite 可選擇的范圍并不多。
(一) SQLite studio
官網(wǎng)地址:https://sqlitestudio.pl/ ,提供下載。
SQLiteStudio 是一款可以幫助用戶(hù)管理 SQLite 數(shù)據(jù)庫(kù)的工具。該 SQLiteStudio 數(shù)據(jù)庫(kù)管理工具具有功能完善的 SQLite2 和 SQLite3 工具,視圖編碼支持 utf8,還可以同時(shí)打開(kāi)多個(gè)數(shù)據(jù)庫(kù)文件。

特點(diǎn):
功能完善的SQLite2和SQLite3工具; 視圖編碼支持utf8; 支持導(dǎo)出數(shù)據(jù)格式:csv、html、plain、sql、xml; 可同時(shí)打開(kāi)多個(gè)數(shù)據(jù)庫(kù)文件; 支持查看和編輯二進(jìn)制字段; 輕量級(jí),獨(dú)立性,沒(méi)有依賴(lài); 隔離性,全部在一個(gè)文件夾系統(tǒng); 跨平臺(tái),支持眾多操作系統(tǒng); 多語(yǔ)言接口 支持眾多編程語(yǔ)言; 安全性,通過(guò)獨(dú)占性和共享鎖來(lái)實(shí)現(xiàn)獨(dú)立事務(wù)的處理,多個(gè)進(jìn)程可以在同一個(gè)時(shí)間內(nèi)從同一個(gè)數(shù)據(jù)庫(kù)讀取數(shù)據(jù),但只有一個(gè)可以寫(xiě)入數(shù)據(jù); 支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。
(二) Sqlitespy
下載地址:https://www.yunqa.de/delphi/products/sqlitespy/index 。
SQLiteSpy 是一款針對(duì) SQLite3 數(shù)據(jù)庫(kù)進(jìn)行可視化管理的工具,不需要安裝,只需將該軟件提起到任何目錄和執(zhí)行文件就能立即開(kāi)始工作,軟件是一個(gè)獨(dú)立的管理工具,他不會(huì)與數(shù)據(jù)庫(kù)中的文件及程序產(chǎn)生沖突,操作起來(lái)非常方便。用戶(hù)只需懂基礎(chǔ)的 SQL 語(yǔ)句就可以輕松執(zhí)行 SQL 查詢(xún),視圖、復(fù)制和刪除表、編輯單元格,以及查看索引,觸發(fā)器和排序規(guī)則等操作,非常便捷。
(三) Navicat for SQLite
網(wǎng)站地址:https://www.navicat.com.cn/products/navicat-for-sqlite 。
Navicat for SQLite 是一款強(qiáng)大而全面的 SQLite 圖形用戶(hù)界面,提供了一套完整的數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)功能,并且支持優(yōu)化SQLite工作流程和生產(chǎn)力,通過(guò)它我們可以快速、安全地創(chuàng)建、組織、訪問(wèn)和共享信息。

特點(diǎn):
數(shù)據(jù)傳輸和數(shù)據(jù)同步以低成本輕松快速地遷移數(shù)據(jù); 能將不同格式的數(shù)據(jù)傳輸?shù)綌?shù)據(jù)。表、視圖或查詢(xún)結(jié)果的數(shù)據(jù)可導(dǎo)出為 Excel、Access、CSV 等格式; 可視化 SQL 創(chuàng)建工具幫助我們創(chuàng)建、編輯和運(yùn)行 SQL 語(yǔ)句,而不必?fù)?dān)心語(yǔ)法和正確命令的用法。透過(guò)關(guān)鍵字建議和減少重復(fù)輸入相同的代碼,自動(dòng)完成代碼和自定義的代碼段功能可讓編碼更加快速。

五、 操作SQLite3數(shù)據(jù)庫(kù)
在項(xiàng)目中的 background 文件夾中創(chuàng)建 sqlite3db.js 文件,引入 SQLite3 并初始化數(shù)據(jù)庫(kù),然后新建一張表,最后插入數(shù)據(jù)。
import sq3 from "sqlite3";
const sqlite3 = sq3.verbose()
const db = new sqlite3.Database('sq3.db')
db.serialize(() => {
db.run("create table test(name varchar(20))", () => {
db.run("insert into test values('nihao')", () => {
db.all("select * from test", (err, res) => {
if (err) throw err
console.log(JSON.stringify(res))
})
})
})
})
export default db
在 main.js 中導(dǎo)入并且使用
import sqlite3db from './sqlite3db'
// 數(shù)據(jù)庫(kù)
app.sqlite3db = sqlite3db
啟動(dòng)應(yīng)用,根目錄下生成數(shù)據(jù)庫(kù)。
使用 sqlite studio 打開(kāi),添加數(shù)據(jù)庫(kù),查看導(dǎo)入的數(shù)據(jù)。

選擇文件路徑,添加數(shù)據(jù)庫(kù)。

選擇 test 表,切換到數(shù)據(jù),查看插入的值。

導(dǎo)入成功。
六、 參考文獻(xiàn)
https://newsn.net/say/electron-install-sqlite3.html
https://www.cnblogs.com/liulun/p/13061672.html
- END -最后,希望大家一定要點(diǎn)贊三連。
一個(gè)學(xué)習(xí)編程技術(shù)的公眾號(hào)。每周推送高質(zhì)量的優(yōu)秀博文、開(kāi)源項(xiàng)目、實(shí)用工具、面試技巧、編程學(xué)習(xí)資源等等。目標(biāo)是做到個(gè)人技術(shù)與公眾號(hào)一起成長(zhǎng)。歡迎大家關(guān)注,一起進(jìn)步,走向全棧大佬的修煉之路
