Skip to content

sqlite数据库(可选),如果不需要,请删除 demo 中相关代码和依赖。

sqlite第三方包是c/c++写的,因此需要重新编译。请认真看以下教程和它的官方文档。

特点

  • 大数据量: 0-1024GB(单库)
  • 高性能
  • 类mysql语法

安装

准备:需要python3环境 (macos安装Python)

重点:先把better_sqlite3依赖删了,把其他依赖装好,再把better_sqlite3单独装,如果有报错,window10需要安装studio社区版,把c++桌面开发选上, 最后 npm run re-sqlite 或 npm rebuild

bash
# 安装 node-gyp
# node-gyp@10.3.1 支持node 16.20.0
npm i node-gyp@10.3.1 -g

# 安装 构建工具
npm install --save-dev @electron/rebuild

# (必须)重新构建适合当前操作系统的sqlite
npm i better-sqlite3@11.7.0
npm run re-sqlite

# 如果sqlite报错 ...tools之类的
npm --vs2015 i -g --production windows-build-tools
# 或
npm i -g --production windows-build-tools

# 或 删除整个node_modules,重新安装
# 或 重新安装 Visual Studio Community

better-sqlite3 问题

请查看:better-sqlite3 官方安装问题文档

javascript
"scripts": {
  "re-sqlite": "electron-rebuild -f -w better-sqlite3"
}

安装失败?查看:常见问题

框架历史使用的版本

  1. node.js: v20.16.0 | electron: v31.7.6 | (better-sqlite3: v11.7.0)
  2. node.js: v16.20.0 | electron: v21.4.4 | (better-sqlite3: v8.4.0)
  3. node.js: v14.21.1 | electron: v13.6.9 | (better-sqlite3: v7.6.0)
  4. node.js: v12.22.0 | electron: v12.2.3 | (better-sqlite3: v7.6.0)

数据文件位置

打包前:项目根目录

bash
electron-egg/data/db/xxx.db

打包后:软件缓存目录

# windows (例子)
---------\.软件名(如:.ee)\data\db\xxx.db

# macOS (例子)
Users/用户/.软件名(如:.ee)/data/db/xxx.db

# Linux (例子)
$XDG_CONFIG_HOME or ~/.软件名(如:.ee)/data/db/xxx.db

连接数据库

javascript

// basedb.js
const { SqliteStorage } = require('ee-core/storage');
const { getDataDir } = require('ee-core/ps');

/**
 * sqlite数据存储
 * @class
 */
class BasedbService {

  constructor(options) {
    const { dbname } = options;
    this.dbname = dbname;
    this.db = undefined;
    this._init();
  }

  /*
   * 初始化
   */
  _init() {
    // 定义数据文件
    const dbFile = path.join(getDataDir(), "db", this.dbname);
    const sqliteOptions = {
      timeout: 6000,
      verbose: console.log
    }
    this.storage = new SqliteStorage(dbFile, sqliteOptions);
    this.db = this.storage.db;
  }
}  

BasedbService.toString = () => '[class BasedbService]';
module.exports = {
  BasedbService,
};


// sqlitedb.js
const { BasedbService } = require('./basedb');

/**
 * sqlite数据存储
 * @class
 */
class SqlitedbService extends BasedbService {

  constructor () {
    const options = {
      dbname: 'sqlite-demo.db',
    }
    super(options);
    this.userTableName = 'user';
    this._initTable();
  }

  ......
}

options 说明

javascript
const sqliteOptions = {
  timeout: 6000,
  verbose: console.log // 打印sql语法
}

// sqliteOptions对象

readonly: false
以只读模式打开数据库连接 (默认: false).

fileMustExist: false
如果数据库不存在, 将引发错误,而不是创建新文件. 对于内存中、临时或只读数据库连接,忽略此选项 (默认: false).

timeout: 5000
在锁定的数据库上执行查询时,在引发 SQLITE_BUSY 错误之前等待的毫秒数 (默认: 5000).

verbose: null
提供一个函数,该函数使用数据库连接执行的每个SQL字符串进行调用 (默认: null).

nativeBinding: 
如果您使用的是移动、转换或连接JS文件的复杂构建系统, better-sqlite3 可能无法定位其本机 C++ addon (better_sqlite3.node). 
如果你遇到这样的错误, 您可以通过使用此选项提供 better_sqlite3.node (相对于当前工作目录).

图形化数据(Navicat)

  • 连接本地sqlite-demo.db文件

image.png

  • 表数据

image.png

更多语法

better-sqlite3

请查看:better-sqlite3 文档