electron中使用本地?cái)?shù)據(jù)庫(kù)的方法詳解
眾所周知,electron是可以開(kāi)發(fā)桌面端的框架;既然如此 那我們有一些數(shù)據(jù)不想讓別人看到,只能在自己的電腦上展示時(shí)怎么辦呢?這個(gè)時(shí)候就可以用到本地?cái)?shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)有很多的,今天我給大家介紹的是sqlite3;大家可以一起來(lái)學(xué)習(xí)學(xué)習(xí),卷起來(lái),卷起來(lái)...
安裝sqlite3
yarn add sqlite3
創(chuàng)建文件
在src文件下創(chuàng)建sql文件
sql/index.js // 這是連接數(shù)據(jù)庫(kù)文件 sql/db.js // 這是創(chuàng)建db表格文件 sql/sql-api // 這是接口文件
連接數(shù)據(jù)庫(kù)
os.homedir()是獲取當(dāng)前用戶的主目錄路徑,然后將sql.db文件保存在主目錄路徑; 通俗的講就是保存到C盤(pán)里面。
原因是在熱更新的時(shí)候會(huì)將該項(xiàng)目下的文件全部替換掉,如果你數(shù)據(jù)庫(kù)db文件保存在該項(xiàng)目文件下的話也會(huì)被重置掉,所以才將數(shù)據(jù)庫(kù)保存在C盤(pán)。
如果想了解熱更新的話,請(qǐng)閱讀這篇文章前端使用electron+vue3+ts搭建一個(gè)桌面端應(yīng)用且可以熱更新
const sqlite3 = require('sqlite3').verbose()
let db;
// 連接數(shù)據(jù)庫(kù)
export default function conDb() {
const os = require('os');
const homedir = os.homedir(); // 用于獲取當(dāng)前用戶的主目錄路徑
const users = homedir.replace(/\\/g,'\\\\'); // 替換絕對(duì)和相對(duì)路徑
if (!db || !db.open) {
db = new sqlite3.Database(users+'\\sql.db'); // 保存地址文件
};
return db;
}創(chuàng)建db表格
創(chuàng)建的所有表格都需要放置到serialize方法里面,然后創(chuàng)建的字段根據(jù)sql語(yǔ)法自行創(chuàng)建即可
注意: 以下是test表格,你創(chuàng)建表格的時(shí)候替換這個(gè)名字即可,然后 () 里面的字段表示你表格需要?jiǎng)?chuàng)建的字段名以及類(lèi)型;最后是 () 中的字段的最后一個(gè)不能打逗號(hào),否則會(huì)報(bào)錯(cuò)創(chuàng)建表格不成功
import conDb from './index';
let db;
export function init () {
db = conDb();
return new Promise((resolve,reject) => {
db.serialize(() => {
// 測(cè)試數(shù)據(jù)庫(kù)
db.run(`create table if not exists test (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
buyerType varchar(64) DEFAULT '1',
tel int,
cookie varchar(2000),
uin varchar(1000) DEFAULT null,
uid varchar(1000) DEFAULT null,
createdTimer int
)`);
resolve();
})
})
}在main.js主文件
引入表格文件并創(chuàng)建表格數(shù)據(jù)
import { init } from '@/sql/db';
init();增加數(shù)據(jù)接口
新建sql/sql-api/test.js文件;后面該表格的數(shù)據(jù)操作(獲取和刪除)都將在這個(gè)文件中寫(xiě);我這邊不太會(huì)寫(xiě)接口的一些方式方法,所以大家借鑒一哈就行,畢竟我只是一個(gè)小前端,哈哈哈
大致講解以下代碼的意思:
db.all(inquire 查詢表格中是否有該用戶,如果有該用戶就不插入到表格中;反之插入表格;sql和inquire都是一些sql語(yǔ)法;sql是插入,inquire是查詢語(yǔ)法
import conDb from "../index";
export default {
/**
* 增加數(shù)據(jù)
* @param {*} param0
* @returns
*/
addTest({type = 1, tel, cookie, uin}) {
let db = conDb();
let createdTimer = new Date().getTime();
return new Promise((resolve, reject) => {
let sql = `INSERT INTO test (type, tel, cookie, createdTimer, uin) `;
sql += `values ("${type}", "${tel}", "${cookie}", "${createdTimer}", "${uin}")`;
let inquire = `select * from test where tel = "${tel}"`;
db.all(inquire,(err,list) => { // 查詢用戶
if (err) {
reject({code:400,msg:err,data:[]});
}else {
if (list.length) { // 有用戶
resolve({code:201,msg:'已有該用戶',data:list})
}else { // 沒(méi)有用戶
db.all(sql,(error,data) => {
if (error) {
reject({code:400,msg:error});
} else {
resolve({code:200,msg:'成功',data});
}
});
}
}
})
})
}
}使用效果
代碼:
testApi.addTest({
type:1,
tel:'177****1111',
cookie:'dsjadljsakldjsakldjkaslfklaj',
})
.then(res=>{
console.log(res);
})效果1:

以下就是增加數(shù)據(jù)和重復(fù)數(shù)據(jù)的響應(yīng)效果
獲取數(shù)據(jù)列表
首先通過(guò)totalSql語(yǔ)法獲取test表格有多少條數(shù)據(jù),如果有附加條件也是可以where這個(gè)查找的;得到總數(shù)以后根據(jù)sql語(yǔ)法實(shí)現(xiàn)分頁(yè)效果
如果增加了tel電話號(hào)碼的話,也是可以搜索的
getTest({page = 1,pageSize = 10,tel = ''}) {
let db = conDb();
// 獲取total語(yǔ)法
let totalSql = `select count(*) total from test`;
let total = 0;
return new Promise((resolve, reject) => {
// 統(tǒng)計(jì)總數(shù)
db.all(totalSql,(err,totalData)=>{
if(err) {reject({code:200,msg:err,data:'總計(jì)條數(shù)錯(cuò)誤'})};
total = totalData[0].total;
});
// 實(shí)現(xiàn)分頁(yè)語(yǔ)法
let sql = `select * from test`;
if (tel) {
sql += ` where tel = "${tel}"`;
};
sql += ` limit ${(page - 1) * pageSize},${pageSize}`;
db.all(sql,(error,data) => {
if (error) {
reject({code:400,msg:error});
} else {
resolve({code:200,msg:'成功',data});
}
});
})
}使用效果
代碼:
testApi.getTest({page:1})
.then(res=>{
console.log(res);
})效果2

刪除數(shù)據(jù)接口
delTest({id = 1}) {
let sql = `DELETE FROM test WHERE id = ${id}`;
let weightSql = `select * from test where id = ${id}`;
return new Promise((resolve, reject) => {
let db = conDb();
db.all(weightSql,(err,list)=>{
if (err) {
reject({code:400,msg:err,data:[]});
} else {
if (list.length) {
db.all(sql,(error,data) => {
if (error) {
reject({code:400,msg:error});
} else {
resolve({code:200,msg:'刪除成功',data:list});
}
});
}else {
resolve({code:400,msg:`買(mǎi)家號(hào)不存在`});
}
}
});
})
}使用效果
代碼:
testApi.delTest({id:1})
.then(res=>{
console.log(res);
})效果3:

完成到這兒的時(shí)候,增刪查基本上就完成了;至于改的話,你們可以自己去研究研究,總體上來(lái)說(shuō)都不難;百度sql語(yǔ)句即可;哈哈哈哈
注意 如果在啟動(dòng)或者打包的時(shí)候報(bào)錯(cuò)的話,有可能是sqlite3編譯錯(cuò)誤了(我現(xiàn)在記不住報(bào)錯(cuò)示列了,報(bào)錯(cuò)的時(shí)候是一個(gè)大佬幫我編譯了一個(gè)依賴包;后來(lái)我科學(xué)上網(wǎng)以后就沒(méi)遇到過(guò)這個(gè)問(wèn)題);所以大家在用sqlite3的時(shí)候,一般還是要科學(xué)上網(wǎng),否則可能會(huì)出現(xiàn)問(wèn)題;也可能是py的一些環(huán)境需要在(我的3.x)的;其他的問(wèn)題我就沒(méi)遇到過(guò)了(這個(gè)問(wèn)題是去年剛使用的時(shí)候遇到的)
到此這篇關(guān)于electron中使用本地?cái)?shù)據(jù)庫(kù)的方法詳解的文章就介紹到這了,更多相關(guān)electron使用本地?cái)?shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue-cli項(xiàng)目部署到Nginx服務(wù)器的方法
這篇文章主要介紹了Vue-cli項(xiàng)目部署到Nginx服務(wù)器的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
去除Element-Plus下拉菜單邊框的實(shí)現(xiàn)步驟
Element-Plus 是 Element UI 的 Vue 3 版本,它提供了一套完整的組件庫(kù),在使用 Element-Plus 進(jìn)行開(kāi)發(fā)時(shí),我們可能會(huì)遇到需要自定義組件樣式的情況,本文將介紹如何使用 CSS 來(lái)去除 Element-Plus 下拉框的邊框,需要的朋友可以參考下2024-03-03
Vue使用Sentry實(shí)現(xiàn)錯(cuò)誤監(jiān)控
Sentry?是一款功能強(qiáng)大的開(kāi)源錯(cuò)誤監(jiān)控服務(wù),廣泛用于追蹤和修復(fù)應(yīng)用中的異常情況,本文將詳細(xì)介紹如何在?Vue?應(yīng)用中集成和使用?Sentry,感興趣的可以了解下2024-11-11
從vue基礎(chǔ)開(kāi)始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼(推薦)
這篇文章主要介紹了從vue基礎(chǔ)開(kāi)始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼,需要的朋友參考下2018-02-02
vue解決一個(gè)方法同時(shí)發(fā)送多個(gè)請(qǐng)求的問(wèn)題
今天小編就為大家分享一篇vue解決一個(gè)方法同時(shí)發(fā)送多個(gè)請(qǐng)求的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
vue如何解決el-select下拉框顯示ID不顯示label問(wèn)題
這篇文章主要介紹了vue如何解決el-select下拉框顯示ID不顯示label問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

