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;
复制代码
相关文章