Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战

在 Node.js v22.5.0 及更高版本中,node:sqlite 模块作为内置模块被引入,为开发者提供了与 SQLite 数据库交互的官方支持。以下是关于 node:sqlite 模块的详细介绍:

一、模块启用与导入

  • 启用方式 :node:sqlite 模块目前处于活跃开发阶段,需要通过 --experimental-sqlite CLI 标志来启用。
  • 导入方式 :使用 import 语句从 node:sqlite 模块中导入所需的类和方法。例如:
javascript 复制代码
import { DatabaseSync } from 'node:sqlite';

二、核心类与方法

1. DatabaseSync 类
  • 作用:表示与 SQLite 数据库的单连接,所有 API 均同步执行。
  • 构造函数 :new DatabaseSync(location[, options])
    • location :数据库位置,可以是文件路径(如 './mydb.sqlite')或内存标识(如 ':memory:')。
    • options :配置选项,包括是否自动打开数据库(open)、是否启用外键约束(enableForeignKeyConstraints)等。
2. 常用方法
  • database.exec(sql) :
    • 作用:执行一条或多条 SQL 语句,不返回结果。
    • 示例:
javascript 复制代码
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
  • database.prepare(sql) :
    • 作用:创建预处理语句,用于高效执行重复的 SQL 操作。
    • 示例:
javascript 复制代码
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');
  • database.close() :
    • 作用:关闭数据库连接。
    • 示例:
javascript 复制代码
database.close();

三、使用示例

以下是一个完整的示例,展示了如何使用 node:sqlite 模块进行数据库操作:

javascript 复制代码
import { DatabaseSync } from 'node:sqlite';

// 创建或打开内存数据库
const database = new DatabaseSync(':memory:');

// 创建表
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);

// 插入数据
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');

// 查询数据
const query = database.prepare('SELECT * FROM data ORDER BY key');
console.log(query.all()); // 输出: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]

// 关闭数据库连接
database.close();

四、注意事项

  • 实验性特性 :node:sqlite 模块目前处于实验性阶段,API 可能在未来版本中发生变化。
  • 同步执行 :DatabaseSync 类的所有方法均同步执行,可能会阻塞事件循环。对于高并发场景,建议考虑使用异步数据库驱动(如 sqlite3 模块)。
  • 错误处理 :在使用 node:sqlite 模块时,应妥善处理可能出现的错误,如数据库连接失败、SQL 语句执行错误等。
相关推荐
土豆.exe3 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新4 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball6 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
xiaogai_gai6 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
注塑机数据采集联网6 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析
像风一样自由20206 小时前
56.实战PostgreSQL-pgvector-FastAPI构建轻量级RAG
数据库·人工智能·postgresql·大模型·fastapi·智能体
User_芊芊君子7 小时前
KFS异构同步_260条链路DDL自动转换解析
数据库·ai·大模型
xiancai_xianyu7 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
Zucker n7 小时前
一款适合研究生科研工作安排的日历
linux·数据库·python
Sharewinfo_BJ8 小时前
Power BI沿袭视图详解:从看懂链路到做影响分析
数据库·数据分析·智信bi·上北智信