Electron でローカル データベースを使用する

ご存知のとおり、electron はデスクトップを開発できるフレームワークですが、この場合、他人に見られたくないデータがあり、それを自分のコンピュータでのみ表示できる場合はどうすればよいでしょうか。現時点では、ローカル データベースを使用できます。データベースはたくさんありますが、今日はsqlite3 を紹介します。一緒に学習して、ロールアップして、ロールアップして...

sqlite3をインストールする

yarn add sqlite3 

ファイルを作成する

srcファイルの下にSQLファイルを作成

sql/index.js // 这是连接数据库文件

sql/db.js // 这是创建db表格文件

sql/sql-api // 这是接口文件 

データベースに接続する

os.homedir() は現在のユーザーのホーム ディレクトリ パスを取得し、sql.db ファイルをホーム ディレクトリ パスに保存します (平たく言えば、C ドライブに保存することを意味します)。

その理由は、ホット アップデート中にプロジェクト配下のすべてのファイルが置き換えられるためで、プロジェクト ファイルの下にデータベース db ファイルが保存されている場合、それもリセットされるため、データベースは C ドライブに保存されます。

const sqlite3 = require('sqlite3').verbose()

let db;
// 连接数据库
export default function conDb() {const os = require('os');const homedir = os.homedir(); // 用于获取当前用户的主目录路径const users = homedir.replace(/\\/g,'\\\\'); // 替换绝对和相对路径if (!db || !db.open) {db = new sqlite3.Database(users+'\\sql.db'); // 保存地址文件};return db;
} 

データベーステーブルを作成する

作成されたすべてのテーブルは、serialize メソッドに配置する必要があります。その後、作成されたフィールドは SQL 構文に従って独自に作成できます。

注:以下はテスト フォームです。フォームの作成時にこの名前を置き換えることができます。内部()のフィールドは、フォーム内に作成する必要があるフィールド名とタイプを表します。最後に、()最後のフィールドにはカンマを含めることはできません。そうしないと、フォームの作成時にエラーが報告されます。

 import conDb from './index';

let db;
export function init () {db = conDb();return new Promise((resolve,reject) => {db.serialize(() => {// 测试数据库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 メイン ファイル内

テーブルファイルをインポートしてテーブルデータを作成する

import { init } from '@/sql/db';

init(); 

データインターフェースの追加

新しいsql/sql-api/test.jsファイルを作成します。テーブルの後続のデータ操作 (取得と削除) はすべてこのファイルに書き込まれます。私はここにインターフェイス メソッドを書くのがあまり得意ではないので、誰もがそこから学ぶことができます. 所詮、私は小さなフロントエンドにすぎません、ははは

次のコードの意味を簡単に説明します。

db.all(inquireは、ユーザーがテーブルに存在するかどうかをクエリします。ユーザーが存在する場合、そのユーザーはテーブルに挿入されません。存在しない場合、テーブルは挿入されます。sql と recruit は両方とも SQL 構文です。sql は挿入、inquire です。クエリ構文です。

 import conDb from "../index";

export default {/** * 增加数据 * @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 { // 没有用户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:

データの追加とデータの繰り返しによる応答効果は次のとおりです。

データリストの取得

まず、totalSql 構文を通じてテスト テーブルにデータがいくつあるかを取得します。追加の条件がある場合は、where を使用して検索することもできます。合計数を取得した後、SQL 構文に従ってページング効果を実現できます。

電話番号を追加すると検索も可能です。

 getTest({page = 1,pageSize = 10,tel = ''}) {let db = conDb();// 获取total语法let totalSql = `select count(*) total from test`;let total = 0;return new Promise((resolve, reject) => {// 统计总数db.all(totalSql,(err,totalData)=>{if(err) {reject({code:200,msg:err,data:'总计条数错误'})};total = totalData[0].total;});// 实现分页语法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

データインターフェイスの削除

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:`买家号不存在`});}}});})} 

効果

コード:

testApi.delTest({id:1}).then(res=>{console.log(res);}) 

効果3:

ここまで終われば、追加、削除、クエリは基本的に完了です、修正に関しては自分で勉強できますし、一般的には難しくありません、BaiduのSQL文で十分です、ははは

起動中またはパッケージ化中にエラーが報告された場合、それは sqlite3 のコンパイル エラーである可能性があることに注意してください (今はエラー リストを思い出せません。エラーが報告されたとき、偉い人が依存関係パッケージのコンパイルを手伝ってくれました。その後私はインターネットで科学的になりましたが、この問題に遭遇したことはありません); したがって、sqlite3 を使用するときは、一般に科学的にインターネットをサーフィンする必要があります。そうしないと問題が発生する可能性があります。また、py の一部の環境が必要になる可能性もあります (私の 3 .x); その他の問題については、これまで一度も遭遇したことがありません (この問題は、昨年初めて使い始めたときに発生しました)

やっと

最近、JavaScriptとESに関する重要な知識を合計25個、それぞれ解説・分析したnoteをまとめました。JavaScriptやES関連の知識を素早く習得し、作業効率を向上させることができます。



必要な友達は下のカードをクリックして受け取り、無料で共有できます

おすすめ

転載: blog.csdn.net/web2022050901/article/details/129585032