Object 内置对象

对象 SQLite

SQLite 对象是内置模块 db 的一个成员,主要负责 SQLite 数据库的连接和操作,可用于 SQLite 数据库的创建、查询、插入、更新等操作。同时,SQLite 对象也提供了一些类似备份、格式化 SQL 等高级操作。SQLite 连接对象还支持事务操作

在实际应用中,我们通常根据业务需求创建 SQLite 类型的数据表,然后进行数据的增删改查等操作,例如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
var db = require('db') // open a SQLite database var sqlite = db.openSQLite('test.db') // use execute method to create a table sqlite.execute('CREATE TABLE test (id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, age INT NOT NULL)') // use execute method to insert data sqlite.execute('INSERT INTO test (id, name, age) VALUES (?, ?, ?)', 1, 'Alice', 18) sqlite.execute('INSERT INTO test (id, name, age) VALUES (?, ?, ?)', 2, 'Bob', 20) sqlite.execute('INSERT INTO test (id, name, age) VALUES (?, ?, ?)', 3, 'Charlie', 22) // use execute method to query data var rs = sqlite.execute('SELECT * FROM test') console.log(rs) // use execute method to update data sqlite.execute('UPDATE test SET name=?, age=? WHERE id=?', 'Marry', 19, 1) // use execute method to delete data sqlite.execute('DELETE FROM test WHERE id=?', 2)

SQLite 还内置了 vec_index 模块,我们可以在 SQLite 数据库上创建对向量字段的索引,基于向量字段进行检索,得到与目标向量最近似的向量集合。支持使用数值类型的数组表示向量,如:[1, 2, 3],同时支持向量维度。此外,vec_index 支持在事务内批量操作。

下面是一个简单的示例:

1 2 3 4 5 6 7 8
var db = require('db'); var path = require('path'); var conn = db.openSQLite(path.join(__dirname, 'vec_test.db')); conn.execute('create virtual table vindex using vec_index(title(3), description(3))'); conn.execute(`insert into vindex(title, description, rowid) values("[1,2,3]", "[3,4,5]", 3)`);

可以使用 vec_search 函数执行向量检索,例如:

1 2 3 4
var key = [1, 2, 5.1234]; var limit = 1; var res = conn.execute(`select rowid, distance from vindex where vec_search(title, "${JSON.stringify(key)}")`);

vec_search 返回一个最接近的向量集合和距离数组,其中距离按照从小到大顺序排列。如果需要返回多个最接近的向量集合,可以使用 :limit 参数,例如:

1 2 3 4
var key = [1, 2, 5.1234]; var limit = 1; var res = conn.execute(`select rowid, distance from vindex where vec_search(title, "${JSON.stringify(key)}:10")`);

继承关系

成员属性

fileName

String, 当前数据库文件名

1
readonly String SQLite.fileName;

timeout

Integer, 查询和设置数据库超时时间,以毫秒为单位

1
Integer SQLite.timeout;

type

String, 查询当前连接数据库类型

1
readonly String SQLite.type;

成员函数

backup

备份当前数据库到新文件

1
SQLite.backup(String fileName) async;

调用参数:

  • fileName: String, 指定备份的数据库文件名

close

关闭当前数据库连接

1
SQLite.close() async;

use

选择当前数据库连接的缺省数据库

1
SQLite.use(String dbName) async;

调用参数:

  • dbName: String, 指定数据库名

begin

在当前数据库连接上启动一个事务

1
SQLite.begin(String point = "") async;

调用参数:

  • point: String, 指定事务的名称,缺省不指定

commit

提交当前数据库连接上的事务

1
SQLite.commit(String point = "") async;

调用参数:

  • point: String, 指定事务的名称,缺省不指定

rollback

回滚当前数据库连接上的事务

1
SQLite.rollback(String point = "") async;

调用参数:

  • point: String, 指定事务的名称,缺省不指定

trans

进入事务执行一个函数,并根据函数执行情况提交或者回滚

1
Boolean SQLite.trans(Function func);

调用参数:

  • func: Function, 以事务方式执行的函数

返回结果:

  • Boolean, 返回事务是否提交,正常 commit 时返回 true, rollback 时返回 false,如果事务出错则抛出错误

func 执行有三种结果:

  • 函数正常返回,包括运行结束和主动 return,此时事务将自动提交
  • 函数返回 false,此时事务将回滚
  • 函数运行错误,事务自动回滚

进入事务执行一个函数,并根据函数执行情况提交或者回滚

1 2
Boolean SQLite.trans(String point, Function func);

调用参数:

  • point: String, 指定事务的名称
  • func: Function, 以事务方式执行的函数

返回结果:

  • Boolean, 返回事务是否提交,正常 commit 时返回 true, rollback 时返回 false,如果事务出错则抛出错误

func 执行有三种结果:

  • 函数正常返回,包括运行结束和主动 return,此时事务将自动提交
  • 函数返回 false,此时事务将回滚
  • 函数运行错误,事务自动回滚

execute

执行一个 sql 命令,并返回执行结果

1
NArray SQLite.execute(String sql) async;

调用参数:

  • sql: String, 字符串

返回结果:

  • NArray, 返回包含结果记录的数组,如果请求是 UPDATE 或者 INSERT,返回结果还会包含 affected 和 insertId,mssql 不支持 insertId。

执行一个 sql 命令,并返回执行结果,可根据参数格式化字符串

1 2
NArray SQLite.execute(String sql, ...args) async;

调用参数:

  • sql: String, 格式化字符串,可选参数用 ? 指定。例如:'SELECT FROM TEST WHERE [id]=?'
  • args: ..., 可选参数列表

返回结果:

  • NArray, 返回包含结果记录的数组,如果请求是 UPDATE 或者 INSERT,返回结果还会包含 affected 和 insertId,mssql 不支持 insertId。

createTable

创建数据表

1
SQLite.createTable(Object opts) async;

调用参数:

  • opts: Object, 参数列表

dropTable

删除数据表

1
SQLite.dropTable(Object opts) async;

调用参数:

  • opts: Object, 参数列表

createIndex

创建数据表索引

1
SQLite.createIndex(Object opts) async;

调用参数:

  • opts: Object, 参数列表

dropIndex

删除数据表索引

1
SQLite.dropIndex(Object opts) async;

调用参数:

  • opts: Object, 参数列表

insert

插入新记录

1
Number SQLite.insert(Object opts) async;

调用参数:

  • opts: Object, 参数列表

返回结果:

  • Number, 返回包含插入的 id,如果引擎不支持则返回 0

find

根据指定的条件查询数据

1
NArray SQLite.find(Object opts) async;

调用参数:

  • opts: Object, 参数列表

返回结果:

  • NArray, 返回包含结果记录

count

根据指定的条件统计数据记录数

1
Integer SQLite.count(Object opts) async;

调用参数:

  • opts: Object, 参数列表

返回结果:

  • Integer, 返回包含结果记录数

update

根据指定的条件更新数据

1
Integer SQLite.update(Object opts) async;

调用参数:

  • opts: Object, 参数列表

返回结果:

  • Integer, 返回包含更新的记录数

remove

根据指定的条件删除数据

1
Integer SQLite.remove(Object opts) async;

调用参数:

  • opts: Object, 可选参数列表

返回结果:

  • Integer, 返回包含更新的记录数

format

格式化一个 sql 命令,并返回格式化结果

1 2
String SQLite.format(String method, Object opts);

调用参数:

  • method: String, 指定请求的方法
  • opts: Object, 可选参数列表

返回结果:

  • String, 返回格式化之后的 sql 命令

格式化一个 sql 命令,并返回格式化结果

1 2
String SQLite.format(String sql, ...args);

调用参数:

  • sql: String, 格式化字符串,可选参数用 ? 指定。例如:'SELECT FROM TEST WHERE [id]=?'
  • args: ..., 可选参数列表

返回结果:

  • String, 返回格式化之后的 sql 命令

toString

返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现

1
String SQLite.toString();

返回结果:

  • String, 返回对象的字符串表示

toJSON

返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

1
Value SQLite.toJSON(String key = "");

调用参数:

  • key: String, 未使用

返回结果:

  • Value, 返回包含可 JSON 序列化的值