electron集成sqlite3 MVC封装使用

一:添加依赖 配置环境(注意target electron版本)

1: yarn add sqlite3@latest --build-from-source --runtime=electron --target=8.5.2 --dist-url=https://atom.io/download/electron
2: yarn add electron-rebuild    node > 12.19.0 需要升级最新node版本
3: yarn add aws-sdk             需要先安装aws-sdk  不然 rebuild失败
4: package.json 增加命令    "rebuild:sql": "electron-rebuild -f -w sqlite3"
5: yarn rebuild:sql    验证 可用性 可行

二:封装sql方法 主进程下创建 sqlite.js

// import sqlite3 from 'sqlite3'
const sqlite3 = require('sqlite3');
const sqlite = sqlite3.verbose();
class Sqlite {
  constructor () {
    this.sqlInstance = null;
    this.db = null;
  }

  // 连接数据库
  connect (path) {
    return new Promise((resolve, reject) => {
      this.db = new sqlite.Database(path, (err) => {
        if (err) {
          reject(err);
        } else {
          resolve(1);
        }
      });
    });
  }

  // 运行sql
  run (sql, params) {
    return new Promise((resolve, reject) => {
      this.db.run(sql, params, (err) => {
        if (err) {
          reject(err);
        } else {
          resolve(1);
        }
      });
    });
  }

  // 运行多条sql
  exec (sql) {
    return new Promise((resolve, reject) => {
      this.db.exec(sql, (err) => {
        if (err) {
          reject(err);
        } else {
          resolve(1);
        }
      });
    });
  }

  // 查询一条数据
  get (sql, params) {
    return new Promise((resolve, reject) => {
      this.db.get(sql, params, (err, data) => {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });
    });
  }

  // 查询所有数据
  all (sql, params) {
    return new Promise((resolve, reject) => {
      this.db.all(sql, params, (err, data) => {
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });
    });
  }

  // 关闭数据库
  close () {
    this.db.close();
  }

  // 单例
  static getInstance () {
    this.sqlInstance = this.sqlInstance ? this.sqlInstance : new Sqlite();
    return this.sqlInstance;
  }
}

export default Sqlite;

三:主进程注册 Sqlite 服务

// 数据库服务
import Sqlite from './utils/sqlite';

const sqlite = new Sqlite();
context.sqlite = sqlite;     //context 定义为全局上下文

四:以User数据 创建  UserListTable  数据模型  UserListTable.js

class UserListTable {
  constructor (context) {
    this.mContext = context;
  }
  insertAllContacts (args, userInfo) {
    const list = args.data;
    let sql = ‘’
    return this.mContext.sqlite.exec(sql);
  }
  searchUserList (params) {
    params = {userId: 123};
    return this.mContext.sqlite.all('SELECT * FROM test');
  }
}
export default UserListTable;

五:创建User 控制器 userListCorl.js 调用

import BaseClass from './baseClass';
class UserListCorl extends BaseClass {
  async insertAllContacts (args, userInfo) {
    return this.userListTable.insertAllContacts(args, userInfo);
  }
}
export default UserListCorl;

补充

baseClass.js

// 所有的models 都在base注册 在其他class 消费
import InitDB from '../models/initDB';
import UserListTable from '../models/userListTable';
class BaseClass {
  constructor (context) {
    this.mContext = context;
    this.mInitDB = new InitDB(context);
    this.userListTable = new UserListTable(context);
  }
}
export default BaseClass;
InitDB.js
class InitDB {
  constructor (content) {
    this.mContext = content;
  }
  connectDB (path) {
    return this.mContext.sqlite.connect(path);
  }
  createTable () {
    // 创建表
    return this.mContext.sqlite.exec(sql);
    // 还需创建 多张表
  }
  insertTestData (params) {
    return this.mContext.sqlite.run(sql);
  }
}
export default InitDB;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值