更新记录

1.0.0(2026-09-30) 下载此版本

1.0.0 初始化


平台兼容性

uni-app x(5.26)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ √ √ √ ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

uni-sqlite

基于 UASM 实现的 SQLite 数据库插件,支持 uni-app x 的 App(Android / iOS / Harmony)与 Web 平台。

规范说明

当前 uni-sqlite 的 API 采用 Node.js 规范。

核心同步接口(DatabaseSync、StatementSync)的类名、方法名、参数与返回值,均与 Node.js 内置模块 node:sqlite 保持一致,遵循 Node.js 的数据库访问约定:

  • 同步(Sync)API 直接返回结果,不使用回调;
  • DatabaseSync.prepare() 返回 StatementSync 对象,通过 run() / get() / all() 执行语句;
  • 占位符支持匿名参数(?)与命名参数(:name、@name、$name);
  • 参数与返回值的类型约束为 null | number | bigint | string | ArrayBuffer;
  • run() 返回 StatementResultingChanges(包含 lastInsertRowid、changes);
  • 提供 columns()、setReadBigInts()、setReturnArrays() 等与 Node.js 一致的元数据及行为控制方法。

在此基础上,插件额外提供了 DatabaseAsync / StatementAsync 两个异步包装类(非 Node.js 规范,为 uni-sqlite 扩展),用于在需要 Promise 风格的场景下调用底层同步接口。两类 API 的方法语义完全一致。

说明:uasm/index.d.ts 中同步接口的签名即按 node:sqlite 定义,可直接与 Node.js 官方文档对照使用。

快速开始

// 1. 加载 uasm 原生库
const sqlite = await uni.loadUasm("uni_modules/uni-sqlite")

// 2. 创建并打开数据库(与 Node.js 用法一致)
const db = new sqlite.DatabaseSync(":memory:", { open: false })
db.open()

// 3. 执行 SQL
db.exec("CREATE TABLE IF NOT EXISTS demo_users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL)")

// 4. 预编译语句并写入
const insert = db.prepare("INSERT INTO demo_users (name, age) VALUES (?, ?)")
const changes = insert.run("user-1", 21)
console.log(changes.lastInsertRowid, changes.changes)

// 5. 查询
const query = db.prepare("SELECT id, name, age FROM demo_users ORDER BY id ASC")
const rows = query.all()

// 6. 关闭数据库
db.close()

API 文档

DatabaseSync(Node.js 规范)

方法 说明
new DatabaseSync(location, options?) 创建数据库实例。location 支持文件路径或 :memory:
open(): void 打开数据库
close(): void 关闭数据库
exec(sql): void 执行一段或多段 SQL
prepare(sql): StatementSync 预编译 SQL,返回语句对象
location(databaseName?): string \| null 返回数据库文件位置

DatabaseSyncOptions:

选项 类型 说明
open boolean 构造时是否自动打开,默认 true
readOnly boolean 是否以只读方式打开
enableForeignKeyConstraints boolean 是否启用外键约束
enableDoubleQuotedStringLiterals boolean 是否允许双引号字符串字面量
timeout number 锁等待超时时间(毫秒)

StatementSync(Node.js 规范)

方法 说明
run(...params): StatementResultingChanges 执行写入类语句,返回变更结果
get(...params): StatementRow \| undefined 执行查询并返回首行
all(...params): StatementRow[] 执行查询并返回全部行
columns(): StatementColumnMetadata[] 返回结果列元数据
setReadBigInts(enabled): void 设置读取结果为 BigInt
setReturnArrays(enabled): void 设置以数组形式返回行(默认对象)
setAllowBareNamedParameters(enabled): void 设置允许命名参数省略前缀
setAllowUnknownNamedParameters(enabled): void 设置允许传入未使用的命名参数

参数支持两种形式:匿名参数直接展开传入(run(v1, v2)),命名参数以对象作为首个参数传入(run({ name: v1, age: v2 }, ...))。

DatabaseAsync / StatementAsync(uni-sqlite 扩展)

异步包装类,方法名与同步版一一对应,返回值统一为 Promise:

  • DatabaseAsync:open / close / exec / prepare / location
  • StatementAsync:run / get / all / columns / setReadBigInts / setReturnArrays / setAllowBareNamedParameters / setAllowUnknownNamedParameters
const db = new sqlite.DatabaseAsync(":memory:")
await db.exec("CREATE TABLE t (id INTEGER PRIMARY KEY, v TEXT)")
const stmt = await db.prepare("INSERT INTO t (v) VALUES (?)")
await stmt.run("hello")
await db.close()

类型定义

export type SQLInputValue = null | number | bigint | string | ArrayBuffer
export type SQLOutputValue = null | number | bigint | string | ArrayBuffer
export type NamedParameters = Record<string, SQLInputValue>
export type StatementRow = Record<string, SQLOutputValue> | SQLOutputValue[]

export interface StatementResultingChanges {
  lastInsertRowid: number | bigint
  changes: number | bigint
}

export interface StatementColumnMetadata {
  column: string | null
  database: string | null
  name: string | null
  table: string | null
  type: string | null
}

注意事项

  • 同步 API(DatabaseSync / StatementSync)为 Node.js 规范接口,请优先与 Node.js 官方文档对照使用。
  • DatabaseAsync / StatementAsync 为 uni-sqlite 扩展,不属于 Node.js 规范,仅提供 Promise 风格封装。
  • 加载原生库请使用 uni.loadUasm,App 端加载 .so / .xcframework,Web 端加载 WASM 实现。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

uni-sqlite(以下简称软件)源码使用许可协议

2022年10月

本许可协议,是数字天堂(北京)网络技术有限公司(以下简称DCloud)对其所拥有著作权的“软件”,提供的使用许可协议。

您对“软件”的复制、使用、修改及分发受本许可协议的条款的约束,如您不接受本协议,则不能使用、复制、修改本软件。

授权许可范围

a) 授予您永久性的、全球性的、免费的、非独占的、不可撤销的本软件的源码使用许可,您可以使用这些源码制作自己的应用。

b) 您只能在DCloud产品体系内使用本软件及其源码。您不能将源码修改后运行在DCloud产品体系之外的环境,比如客户端脱离uni-app。

c) DCloud未向您授权商标使用许可。您在根据本软件源码制作自己的应用时,需以自己的名义发布软件,而不是以DCloud名义发布。

d) 本协议不构成代理关系。

DCloud的责任限制 “软件”在提供时不带任何明示或默示的担保。在任何情况下,DCloud不对任何人因使用“软件”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。

您的责任限制

a) 您需要在授权许可范围内使用软件。

b) 您在分发自己的应用时,不得侵犯DCloud商标和名誉权利。

c) 您不得进行破解、反编译、套壳等侵害DCloud知识产权的行为。您不得利用DCloud系统漏洞谋利或侵害DCloud利益,如您发现DCloud系统漏洞应第一时间通知DCloud。您不得进行攻击DCloud的服务器、网络等妨碍DCloud运营的行为。未经书面许可,您不得利用DCloud的产品进行与DCloud争夺开发者的行为。

d) 如您违反本许可协议,需承担因此给DCloud造成的损失。

本协议签订地点为中华人民共和国北京市海淀区。

根据发展,DCloud可能会对本协议进行修改。修改时,DCloud会在产品或者网页中显著的位置发布相关信息以便及时通知到用户。如果您选择继续使用本框架,即表示您同意接受这些修改。

条款结束

暂无用户评论。