Skip to main content

sql.js

tip
  • 不依赖 C/node-gyp - Webassembly
  • 内存读写 - 支持导入和导出 SQLite
  • 如果导入 SQLite 需要将所有数据导入内存 - 对内存占用可能较多
  • 不能 和 SQLite 同时读写相同 DB 文件
  • 如果环境支持 Node 建议直接使用 SQLite
  • typeorm 支持 sql.js 可以在浏览器使用
yarn add sql.js
yarn add --dev @types/sql.js

基础功能

import initSqlJs from 'sql.js';

// 初始化
const SQL = await initSqlJs();

// 准备数据
const db = new SQL.Database(/* data:Uint8Array 初始数据 */);
db.run('CREATE TABLE test (col1, col2);');
db.run('INSERT INTO test VALUES (?,?), (?,?)', [1, 111, 2, 222]);

// 准备语句
const stmt = db.prepare('SELECT * FROM test WHERE col1 BETWEEN $start AND $end');
stmt.getAsObject({ $start: 1, $end: 1 });

// 查询
stmt.bind({ $start: 1, $end: 2 });
while (stmt.step()) {
const row = stmt.getAsObject();
// 返回的行对象
console.log(row);
}

// 自定义函数
function add(a, b) {
return a + b;
}
db.create_function('add_js', add);

// 释放占用的内存
stmt.free();

// 导出 DB
const data: Uint8Array = db.export();