SuperAPI AI 工具集

bun-sqlite

数据与分析

查看项目

更新于 10-15 09:14

技能介绍

用途

bun-sqlite 用于在 Bun 运行时中使用内置的高性能 SQLite 驱动 bun:sqlite,完成数据库操作,包括建库建表、增删改查、预编译语句、事务和批量写入等任务。

主要能力

打开数据库

通过 import { Database } from "bun:sqlite" 引入,支持多种打开方式:

  • 文件数据库:new Database("data.sqlite")
  • 内存数据库:new Database(":memory:")
  • 只读模式:new Database("data.sqlite", { readonly: true })
  • 不存在时创建(默认行为):new Database("new.sqlite", { create: true })
  • 严格模式(推荐):new Database("strict.sqlite", { strict: true })

运行查询

  • 直接执行:db.run() 用于 INSERT、UPDATE、DELETE 和 DDL;返回结果包含 changes(受影响行数)与 lastInsertRowid(最后插入的 ID)。
  • 预编译语句(推荐):db.prepare() 创建语句,可重复使用。

查询方法

对预编译语句可使用:

  • .get():返回第一行或 null
  • .all():返回全部行数组
  • .values():以数组形式返回行数据(非对象)
  • .iterate():返回迭代器,适合大结果集,节省内存
  • .run():执行且不返回数据

参数绑定

支持位置参数 ? 与命名参数 $name、:name、@name。命名参数传入对象时键名不带前缀(如 { name: "Dave" })。

事务

通过 db.transaction() 包装函数创建事务,支持三种模式:

  • tx.deferred():默认,延迟到首次写入才加锁
  • tx.immediate():事务开始时立即加锁
  • tx.exclusive():独占锁,阻塞其他连接

批量操作与性能

可开启 WAL 模式提升并发性能:db.run("PRAGMA journal_mode = WAL")。结合事务进行批量插入。其他性能相关 PRAGMA 包括 synchronous = NORMAL、cache_size、foreign_keys = ON。

列类型映射

  • INTEGER → number | bigint
  • REAL → number
  • TEXT → string
  • BLOB → Uint8Array
  • NULL → null

大整数可能返回 bigint。可通过 stmt.columnNames 获取列名,并支持 TypeScript 类型注解:

const typedStmt = db.prepare<{ id: number; name: string }, [number]>(
  "SELECT id, name FROM users WHERE id = ?"
);

错误处理

引入 SQLiteError 进行捕获,error.code 可区分错误类型(如 SQLITE_CONSTRAINT_UNIQUE)。

数据库管理

  • db.close():关闭数据库
  • db.inTransaction:判断是否在事务中
  • db.serialize():序列化为 Buffer 用于备份
  • Database.deserialize(data):从 Buffer 恢复
  • db.filename:获取路径或 :memory:

常见模式

资料给出 Repository 模式示例,将预编译语句集中管理,封装 findById、findAll、create 等方法。

常见错误对照

  • SQLITE_CONSTRAINT:约束冲突,检查 UNIQUE/外键
  • SQLITE_BUSY / database is locked:并发访问,启用 WAL 并加重试
  • no such table:表不存在,先执行 CREATE TABLE

使用方式

在 Bun 项目中通过 bun:sqlite 模块导入 Database 使用,无需额外安装依赖。

适用场景

适合 Bun 应用中的本地数据持久化、结构化数据查询、事务控制与批量写入等场景。

限制

资料未提供关于收费、平台兼容范围、并发上限或性能指标的具体说明;相关事实暂未提供。加载参考文件 references/pragmas.md 可了解性能调优、journal 模式与内存配置,加载 references/fts.md 可了解全文搜索与 FTS5 配置。