sqlite 数据库

node:sqlite 是 Node.js 内置的 SQLite 数据库模块(v22.5+ 引入,目前为候选发布阶段),无需安装第三方库即可操作 SQLite。所有 API 均为同步执行。

引入方式

引入说明
const { DatabaseSync } = require('node:sqlite')仅可通过 node: 前缀使用

打开数据库(DatabaseSync)

API说明
new DatabaseSync(path[, options])打开数据库连接;path 传文件路径,':memory:' 表示纯内存数据库(临时用,不落盘)

常用 options:

选项默认说明
opentrue是否构造时立即打开
readOnlyfalse只读模式打开(数据库不存在则失败)
enableForeignKeyConstraintstrue启用外键约束
timeout0忙碌超时(ms),等待数据库锁释放的最长时间
readBigIntsfalse整数按 bigint 读取(超出安全整数范围时必需)
returnArraysfalse查询结果以数组而非对象返回

DatabaseSync 常用方法

API说明
db.exec(sql)执行一条或多条 SQL 语句(建表、批量操作,无返回值)
db.prepare(sql[, options])预编译 SQL 语句,返回 StatementSync,可绑定参数复用
db.close()关闭连接(用完必须关,避免占用文件锁)
db.function(name, fn)注册自定义 JS 函数,可在 SQL 中调用
db.isOpen连接是否已打开
db.isTransaction当前是否在事务中

支持 Symbol.dispose,可用 using db = new DatabaseSync(...) 语法自动关闭连接。

预编译语句(StatementSync)

API返回说明
stmt.get(...params)对象或 undefined取第一行结果(按列名对象)
stmt.all(...params)对象数组取全部结果
stmt.iterate(...params)迭代器逐行迭代,适合大结果集省内存
stmt.run(...params){changes, lastInsertRowid}执行写操作,返回受影响行数和最后插入的自增 ID
stmt.columns()数组返回结果列信息

参数绑定:SQL 中用 ?(按位置)或 :name(按名称)占位,必须用占位符传值,不要字符串拼接 SQL(防 SQL 注入)。同一语句可 prepare 一次、run 多次,性能更好。

数据类型转换

SQLite 存储类JS 写入JS 读出
NULLnullnull
INTEGERnumber / bigintnumber / bigint(可配置)
REALnumbernumber
TEXTstringstring
BLOBTypedArray / DataViewUint8Array

超出 JS 安全整数范围的 INTEGER 必须开启 readBigInts,否则抛 ERR_OUT_OF_RANGE。

其他

API说明
sqlite.backup(sourceDb, path[, options])在线备份数据库到文件
sqlite.constantsSQLite 常量(冲突解决、授权等)
db.aggregate(name, options)注册自定义聚合函数(如 sum 自定义版)

事务:SQLite 支持 BEGIN / COMMIT / ROLLBACK,多条写操作包在事务里可大幅提速并保证原子性(db.exec('BEGIN') ... db.exec('COMMIT'))。