electron集成sqlite3 MVC封装使用

2022-05-10 00:00:00 创建 代码 点击 复制 拖拽

一:添加依赖 配置环境(注意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;
复制代码

相关文章