更新记录
1.0.19(2026-07-23)
- 修复插件市场
1.0.18加密试用包在 uni-app x Web 仍提示utssdk/web/index.uts is not a module,并因index.module.js缺少SqlTransactionOperation运行时导出而导致页面空白的问题。 - Web 平台入口由会被收费 UTS 发布流程加密的
index.uts改为自包含index.js;JavaScript 实现不导入任何.uts运行时代码,完整保留内存 SQL 子集、回调、错误码、诊断、JSON 导入导出和能力矩阵。 - Web
index.js对interface.uts的 69 个公开类型使用 JSDoc 类型合并,并提供对应 ESM named export;既兼容 HBuilderX 错误保留import type的运行时链接,又不会把值遮蔽成类型。 - HBuilderX 5.15 Web 发布已验证缺失导出、值当类型和 SQLite 模块 warning 均为 0;浏览器页面完整显示,快速上手已完成打开、建表、参数化写入和查询。
- 本轮只改变 Web 平台实现与版本资料;公开接口、Android/iOS/Harmony/小程序实现、原 uni-app 演示组件、权限、依赖和资源保持不变,无需仅为本次 Web 修复重打 App 自定义基座。
1.0.18(2026-07-23)
- 修复插件市场加密版
1.0.17在 uni-app x Web 运行时仍把SqlTransactionOperation当作浏览器 named import、而加密index.module.js不提供该运行时导出导致页面空白的问题。 - 自动收集内置组件与 uni-app x 示例的 23 个根路径类型,确认 Web
export type已完整,但import type仍遗漏SqlTransactionOperation / BatchSqlItem / BatchCrudItem / MigrationItem / DatabaseTransferResult;本版本一次补齐全部 5 项,避免错误逐个暴露。 - Web 入口现在对打包消费者类型保持
import type + export type声明面对称,为市场加密/云解密编译提供可解析并擦除的完整类型来源;发布守卫会自动阻止后续新增消费者类型时再次漏转发。 - 本轮功能代码只修改 Web 入口纯类型 import,不改
.uvue调用逻辑、公开接口、Android/iOS/Harmony/小程序实现、原 uni-app.vue、权限、依赖或资源,无需重打 App 自定义基座。
1.0.17(2026-07-23)
- 修复
1.0.16在 uni-app x Web 消费者工程中加载内置.uvue组件时,平台专属utssdk/web/index.uts未导出组件所需类型,导致页面空白及does not provide an export named 'BatchCrudItem'的问题。 - Web 入口现通过
export type完整转发组件使用的SqlTransactionOperation / BatchSqlItem / BatchCrudItem / MigrationItem;这些声明只参与编译期检查,不进入浏览器运行时代码。 - 修复前真实 Web 发布复现 4 条未导出警告;补齐转发后 HBuilderX 5.15 Web 发布无上述 warning,生成页面分包不再包含这些类型的运行时 named import/export。
- 本轮功能代码只修改 Web 类型转发层;不改公开接口、Android/iOS/Harmony/小程序实现、原 uni-app
.vue组件、权限、依赖或资源,不需要重新制作 App 自定义基座。
平台兼容性
uni-app(5.07)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
lizhao-sqlite-pro
插件简介
lizhao-sqlite-pro 是纯 UTS SQLite Pro 数据库插件,面向 uni-app / uni-app x。插件兼容 plus.sqlite 风格 API,并扩展结构化 CRUD、参数化 SQL、批处理、迁移、备份恢复、导入导出、能力矩阵和诊断日志。
当前版本
| 版本 | 日期 | 说明 |
|---|---|---|
1.0.19 |
2026-07-23 | Web 入口改为不参与收费 UTS 加密的自包含 index.js,并以 JSDoc + ESM 导出兼容被错误保留的类型导入,修复市场试用页面空白。 |
接入方式怎么选
| 场景 | 推荐接入方式 | 说明 |
|---|---|---|
| 只需要在业务脚本中读写本地数据库 | 直接调用 API | 从 @/uni_modules/lizhao-sqlite-pro 导入公开 API,适合生产业务接入 |
| 不想手写完整 SQL,只想传查询配置 | 使用结构化 CRUD | 使用 selectRows / insertRow / updateRows / deleteRows / batchCrud,可读性更强,值仍走参数绑定 |
| 需要先验证所有能力 | 使用内置演示组件 | 页面中放置 <lizhao-sqlite-pro />,可快速检查打开、写入、查询、迁移、备份和诊断 |
| App 端需要真实 SQLite 文件数据库 | 重新原生联编后调用 API | Android/iOS/Harmony 需要运行到对应平台并完成原生 UTS 编译 |
| Web/小程序只做演示或轻量缓存 | 使用降级 SQL 子集 | Web/小程序不提供完整 SQLite 文件数据库,能力矩阵会标注 nativeSqlite=false |
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| Android | 支持 | 使用系统 android.database.sqlite.SQLiteDatabase,需要原生联编或自定义基座后验证 |
| iOS | 支持 | 使用系统 SQLite3 C API,数据库保存在 Documents/lizhao-sqlite-pro |
| Harmony | 支持 | 使用系统 @ohos.data.relationalStore / rdbStore,数据库保存在应用数据库目录 |
| Web | 降级支持 | 使用内存 SQL 子集降级,非完整 SQLite |
| 微信小程序 | 降级支持 | 使用内存 SQL 子集降级,非完整 SQLite |
| 支付宝小程序 | 降级支持 | 使用内存 SQL 子集降级,非完整 SQLite |
付费加密试用说明: DCloud 的付费 UTS 原生实现仍按平台规则加密,App 试用需使用自定义基座。
1.0.19起,Web 内存降级实现独立放在不含原生能力的utssdk/web/index.js,不会再依赖被加密的 Web.uts模块,因此市场试用 Web 也应能正常加载页面。正式发布后仍需用另一账号删除旧插件并重新下载复验,以市场分发产物为最终依据。
安装与引入
页面和业务代码只能从插件根目录导入,不要直接引用 utssdk 内部文件。
// 从插件根目录统一导入公开 API,不要直接引用 utssdk 内部文件。
import {
openDatabase,
isOpenDatabase,
closeDatabase,
transaction,
executeSql,
selectSql,
getDatabasePath,
executePrepared,
batch,
selectRows,
insertRow,
updateRows,
deleteRows,
batchCrud,
runMigrations,
backupDatabase,
restoreDatabase,
exportDatabase,
importDatabase,
configureDatabase,
inspectDatabase,
runHealthCheck,
getCapabilities,
getDiagnostics,
clearDiagnostics
} from '@/uni_modules/lizhao-sqlite-pro'
目录结构说明
| 路径 | 说明 |
|---|---|
uni_modules/lizhao-sqlite-pro/package.json |
插件市场信息、版本号、平台支持声明 |
uni_modules/lizhao-sqlite-pro/readme.md |
客户接入说明、API 文档、平台差异和注意事项 |
uni_modules/lizhao-sqlite-pro/changelog.md |
版本修复日志 |
uni_modules/lizhao-sqlite-pro/utssdk/interface.uts |
对外 API、参数、返回值、错误码类型定义 |
uni_modules/lizhao-sqlite-pro/utssdk/unierror.uts |
统一错误对象工厂,App 原生端使用 UniError,Web/小程序使用普通错误对象 |
uni_modules/lizhao-sqlite-pro/utssdk/index.uts |
平台分发入口 |
uni_modules/lizhao-sqlite-pro/utssdk/common/structured.uts |
结构化 CRUD SQL 构造层 |
uni_modules/lizhao-sqlite-pro/utssdk/app-android/index.uts |
Android 系统 SQLiteDatabase 实现 |
uni_modules/lizhao-sqlite-pro/utssdk/app-ios/index.uts |
iOS 系统 SQLite3 实现 |
uni_modules/lizhao-sqlite-pro/utssdk/app-harmony/index.uts |
Harmony relationalStore/rdbStore 实现 |
uni_modules/lizhao-sqlite-pro/utssdk/web/index.js |
自包含 Web 降级 SQL 子集入口;不依赖会被市场加密的 .uts 运行时代码 |
uni_modules/lizhao-sqlite-pro/components/lizhao-sqlite-pro/lizhao-sqlite-pro.vue |
uni-app 内置演示组件(JavaScript/Options API) |
uni_modules/lizhao-sqlite-pro/components/lizhao-sqlite-pro/lizhao-sqlite-pro.uvue |
uni-app x 内置演示组件(UTS 强类型) |
uni_modules/lizhao-sqlite-pro/example/index.vue |
最小示例页面 |
权限说明
| 平台 | 权限/配置 | 说明 |
|---|---|---|
| Android | 应用沙盒文件读写 | Android/iOS/Harmony 使用应用沙盒文件读写,不额外申请危险权限 |
| iOS | 应用沙盒文件读写 | 数据库默认放在 Documents/lizhao-sqlite-pro,不访问用户相册、定位、通讯录等敏感资源 |
| Harmony | 应用数据库目录 | 使用系统 rdbStore 和应用数据库目录,不申请跨应用文件权限 |
| Web/小程序 | 无原生权限 | Web/小程序不申请原生权限,仅使用内存降级数据结构 |
自定义基座说明
| 场景 | 是否需要自定义基座 | 说明 |
|---|---|---|
| Android 使用当前版本 | 需要重新原生联编 | 修改了公共 UTS 入口和结构化 SQL 构造层;发布前已在 Android 新自定义基座 USB 真机验证结构化 CRUD、快速上手和增强示例链路 |
| Android 新增三方依赖 | 需要 | 若后续新增 jar/aar/so、Manifest、res、assets 或 Gradle 配置,必须重打 |
| iOS 使用当前版本 | 需要重新原生联编 | 修改了 utssdk/app-ios/index.uts 并链接 libsqlite3.tbd,需要重新 iOS 原生联编或自定义基座 |
| Harmony 使用当前版本 | 需要重新原生联编 | 修改了 utssdk/app-harmony/index.uts 并调用系统 rdbStore,需要重新 Harmony 原生联编 |
| Web/小程序 | 不需要 | 使用脚本降级实现 |
iOS 本版本修改了原生 UTS 实现,仅同步 wgt/appResource 不能让真机旧基座获得修复。如果 HBuilderX 提示手机端自定义基座“已是最新版本”并跳过更新,请确认已安装的新包二进制确实变化;必要时先卸载旧基座或提升 iOS 构建号后再安装。
iOS 重装新基座后可使用仓库脚本自动跑结构化 CRUD 验收:
# 该脚本会运行 iOS appResource 导出、启动 SQLite Pro 示例页,并检查结构化 CRUD 日志与 crash report。
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\acceptance-lizhao-sqlite-pro-ios.ps1 -ConfirmInstalledCustomBase -DeviceId <设备UDID>
API 列表
| 函数名 | 说明 | 参数 |
|---|---|---|
openDatabase |
打开数据库 | DatabaseOptions |
isOpenDatabase |
判断数据库是否打开 | DatabaseOptions |
closeDatabase |
关闭数据库 | DatabaseOptions |
transaction |
执行事务 | SqlTransactionOptions |
executeSql |
执行增删改 SQL | SqlOperationOptions |
selectSql |
执行查询 SQL | SqlOperationOptions |
getDatabasePath |
获取数据库路径 | name: string |
executePrepared |
执行参数化 SQL | PreparedSqlOptions |
batch |
批处理 SQL | BatchSqlOptions |
selectRows |
结构化查询 | SelectRowsOptions |
insertRow |
结构化新增 | InsertRowOptions |
updateRows |
结构化更新 | UpdateRowsOptions |
deleteRows |
结构化删除 | DeleteRowsOptions |
batchCrud |
结构化批量增删查改 | BatchCrudOptions |
runMigrations |
执行迁移 | MigrationOptions |
backupDatabase |
备份数据库 | DatabaseFileOptions |
restoreDatabase |
恢复数据库 | DatabaseFileOptions |
exportDatabase |
导出数据库 | DatabaseTransferOptions |
importDatabase |
导入数据库 | DatabaseTransferOptions |
configureDatabase |
配置数据库 PRAGMA | SqlitePragmaOptions |
inspectDatabase |
检查数据库结构 | SqliteInspectionOptions |
runHealthCheck |
运行数据库健康检查 | SqliteHealthCheckOptions |
getCapabilities |
获取能力矩阵 | 无 |
getDiagnostics |
获取诊断日志 | GetDiagnosticsOptions |
clearDiagnostics |
清空诊断日志 | 无 |
快速上手示例
下面示例展示最常用的打开数据库、建表、参数化写入和查询流程。页面和业务代码仍然只从插件根目录导入。
// 快速上手:打开数据库 -> 建表 -> 参数化写入 -> 查询结果。
import {
openDatabase,
executeSql,
executePrepared,
selectSql
} from '@/uni_modules/lizhao-sqlite-pro'
const dbName = 'demo'
// 打开或创建演示数据库。
openDatabase({
name: dbName,
success() {
// 数据库打开后创建用户表。
executeSql({
name: dbName,
sql: 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
success() {
// 使用 ? 占位符写入数据,避免 SQL 字符串拼接。
executePrepared({
name: dbName,
sql: 'INSERT INTO users (name, age) VALUES (?, ?)',
params: ['Alice', 30],
success() {
// 写入成功后查询全部用户数据。
selectSql({
name: dbName,
sql: 'SELECT * FROM users',
success(rows) {
console.log('查询结果', rows)
},
fail(err) {
console.log('查询失败', err)
}
})
},
fail(err) {
console.log('写入失败', err)
}
})
},
fail(err) {
console.log('建表失败', err)
}
})
},
fail(err) {
console.log('打开数据库失败', err)
}
})
常见增强示例
跑通快速上手后,通常会继续补四类能力:先用结构化 CRUD 减少手写 SQL,再配置数据库稳定性参数,之后查看结构和健康状态,最后用 JSON 导出导入做数据搬迁或调试留档。
结构化 CRUD
结构化 CRUD 适合业务侧不想手写完整 SQL 的场景。where 支持两种写法:一种是 SQL 片段 + whereParams,另一种是对象式条件数组。对象式条件数组不支持任意对象动态键,例如 { age: 18 },这是为了兼容 Harmony ArkTS 对 UTSJSONObject 动态下标的严格限制。
// 结构化 CRUD:用配置项表达 where/orderBy/groupBy/having/limit/offset。
import {
selectRows,
insertRow,
updateRows,
deleteRows,
batchCrud
} from '@/uni_modules/lizhao-sqlite-pro'
// 片段 + 参数:适合已有 SQL 条件片段的业务。
selectRows({
name: 'demo',
table: 'users',
columns: ['age', 'COUNT(*) AS total'],
where: 'age >= ? AND status = ?',
whereParams: [18, 'active'],
groupBy: 'age',
having: 'COUNT(*) > ?',
havingParams: [0],
orderBy: 'age DESC',
limit: 10,
offset: 0,
success(rows) {
console.log('分页分组查询结果', rows)
},
fail(err) {
console.log('结构化查询失败', err)
}
})
// 对象式条件数组:常用操作符由插件转换成参数化 SQL。
selectRows({
name: 'demo',
table: 'users',
columns: ['id', 'name', 'age'],
where: [
{ column: 'age', op: '>=', value: 18 },
{ column: 'name', op: 'LIKE', value: 'A%', connector: 'AND' }
],
orderBy: [{ column: 'id', direction: 'DESC' }],
limit: 10,
success(rows) {
console.log('对象式条件查询结果', rows)
}
})
// 新增、更新、删除都用字段数组表达,字段值会通过 ? 参数绑定。
insertRow({
name: 'demo',
table: 'users',
values: [
{ column: 'name', value: 'Alice' },
{ column: 'age', value: 30 },
{ column: 'status', value: 'active' }
],
success(res) {
console.log('结构化新增成功', res)
}
})
updateRows({
name: 'demo',
table: 'users',
values: [{ column: 'status', value: 'vip' }],
where: [{ column: 'age', op: '>=', value: 30 }],
success(res) {
console.log('结构化更新成功', res)
}
})
deleteRows({
name: 'demo',
table: 'users',
where: [{ column: 'status', op: '=', value: 'inactive' }],
success(res) {
console.log('结构化删除成功', res)
}
})
// 批量增删查改复用事务,失败时按 rollbackOnFail 回滚。
batchCrud({
name: 'demo',
transaction: true,
rollbackOnFail: true,
items: [
{
action: 'insert',
table: 'users',
values: [
{ column: 'name', value: 'Bob' },
{ column: 'age', value: 25 }
]
},
{
action: 'select',
table: 'users',
where: [{ column: 'age', op: 'IN', values: [25, 30] }],
orderBy: [{ column: 'id', direction: 'DESC' }],
limit: 5
}
],
success(res) {
console.log('结构化批量执行成功', res.results)
}
})
配置 PRAGMA
// App 原生端建议在打开数据库后配置外键、WAL 和 busy timeout。
import { configureDatabase } from '@/uni_modules/lizhao-sqlite-pro'
configureDatabase({
name: 'demo',
foreignKeys: true,
journalMode: 'WAL',
busyTimeoutMs: 3000,
synchronous: 'NORMAL',
success(res) {
console.log('PRAGMA 配置成功', res.applied, res.values)
},
fail(err) {
console.log('PRAGMA 配置失败', err)
}
})
数据库健康检查
// 健康检查会返回 quick_check/integrity_check 结果、表数量和警告信息。
import { runHealthCheck } from '@/uni_modules/lizhao-sqlite-pro'
runHealthCheck({
name: 'demo',
fullCheck: false,
includeTableStats: true,
success(res) {
console.log('数据库健康检查', res.ok, res.integrity, res.warnings)
},
fail(err) {
console.log('健康检查失败', err)
}
})
结构检查
// 结构检查适合在发布前或售后排查时确认表结构、列名、行数和样例数据。
import { inspectDatabase } from '@/uni_modules/lizhao-sqlite-pro'
inspectDatabase({
name: 'demo',
includeSampleRows: true,
sampleLimit: 2,
success(res) {
console.log('表数量', res.tableCount)
console.log('表结构', res.tables)
}
})
JSON 导出导入
// JSON 导出会返回 format/schema/tables/rows,可直接作为 importDatabase 的 data 使用。
import { exportDatabase, importDatabase } from '@/uni_modules/lizhao-sqlite-pro'
exportDatabase({
name: 'demo',
success(res) {
console.log('JSON 导出表数量', res.tableCount)
importDatabase({
name: 'demo',
data: res.data,
success(importRes) {
console.log('JSON 导入表数量', importRes.tableCount)
},
fail(err) {
console.log('JSON 导入失败', err)
}
})
},
fail(err) {
console.log('JSON 导出失败', err)
}
})
uni-app 调用示例
下面示例适用于普通 uni-app Vue 页面。Web 端会使用内存 SQL 子集降级,App 端在原生联编后使用真实 SQLite。
<template>
<view>
<!-- 点击按钮后执行最小数据库写入流程。 -->
<button @click="createDemoUser">写入演示用户</button>
</view>
</template>
<script>
import { openDatabase, executeSql } from '@/uni_modules/lizhao-sqlite-pro'
export default {
methods: {
createDemoUser() {
// 先打开数据库,再创建表并写入演示数据。
openDatabase({
name: 'demo',
success() {
executeSql({
name: 'demo',
sql: [
'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)',
"INSERT INTO users (name) VALUES ('uni-app')"
],
success(res) {
console.log('uni-app 写入成功', res)
},
fail(err) {
console.log('uni-app 写入失败', err)
}
})
},
fail(err) {
console.log('uni-app 打开失败', err)
}
})
}
}
}
</script>
uni-app x 调用示例
下面示例适用于 uni-app x 页面脚本。复杂业务建议优先使用 interface.uts 中声明的类型约束参数。
<template>
<view>
<!-- uni-app x 中同样只从插件根目录调用公开 API。 -->
<button @click="queryDemoUsers">查询演示用户</button>
</view>
</template>
<script setup lang="uts">
import { openDatabase, selectSql } from '@/uni_modules/lizhao-sqlite-pro'
// 查询前先确保数据库已打开,失败回调会返回 SqliteFail。
function queryDemoUsers(): void {
openDatabase({
name: 'demo',
success() {
selectSql({
name: 'demo',
sql: 'SELECT * FROM users',
success(rows: any) {
console.log('uni-app x 查询结果', rows)
},
fail(err) {
console.log('uni-app x 查询失败', err)
}
})
},
fail(err) {
console.log('uni-app x 打开失败', err)
}
})
}
</script>
openDatabase(options)
说明 打开或创建数据库。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseOptions | 是 | 数据库打开参数 | 无 | name / path / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.path | string | 否 | 数据库路径 | App 应用沙盒路径 | 无 |
| options.success | function | 否 | 打开成功回调 | 无 | 无 |
| options.fail | function | 否 | 打开失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 数据库路径 |
| opened | boolean | 当前是否打开 |
示例
// 打开或创建 demo 数据库。
openDatabase({
name: 'demo',
success(res) {
console.log('打开成功', res)
},
fail(err) {
console.log('打开失败', err)
},
complete(res) {
console.log('打开完成', res)
}
})
isOpenDatabase(options)
说明
判断数据库是否已经打开,同时会触发 success / complete 返回当前状态。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseOptions | 是 | 数据库状态参数 | 无 | name / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.success | function | 否 | 状态查询成功回调 | 无 | 无 |
| options.fail | function | 否 | 状态查询失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| return | boolean | 数据库是否打开 |
| name | string | 回调中的数据库名称 |
| path | string | 回调中的数据库路径 |
| opened | boolean | 回调中的打开状态 |
示例
// 同步返回 opened,同时通过 success / complete 拿到状态对象。
const opened = isOpenDatabase({
name: 'demo',
success(res) {
console.log('状态查询成功', res)
},
complete(res) {
console.log('状态查询完成', res)
}
})
console.log('当前是否打开', opened)
closeDatabase(options)
说明 关闭已打开的数据库。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseOptions | 是 | 数据库关闭参数 | 无 | name / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.success | function | 否 | 关闭成功回调 | 无 | 无 |
| options.fail | function | 否 | 关闭失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 数据库路径 |
| opened | boolean | 关闭后为 false |
示例
// 关闭已经打开的 demo 数据库。
closeDatabase({
name: 'demo',
success(res) {
console.log('关闭成功', res)
},
fail(err) {
console.log('关闭失败', err)
}
})
transaction(options)
说明
执行事务控制。begin 开启事务,commit 提交事务,rollback 回滚事务。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqlTransactionOptions | 是 | 事务参数 | 无 | name / operation / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.operation | string | 是 | 事务操作 | 无 | begin / commit / rollback |
| options.success | function | 否 | 事务操作成功回调 | 无 | 无 |
| options.fail | function | 否 | 事务操作失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| affectedRows | number | 事务控制语句影响行数,通常为 0 |
| insertId | number | 最近插入 ID,事务控制通常为 0 |
| statementCount | number | 执行语句数量 |
| lastSql | string | 最近执行的事务操作 |
示例
// 开启事务;提交和回滚时把 operation 改为 commit 或 rollback。
transaction({
name: 'demo',
operation: 'begin',
success(res) {
console.log('事务开启成功', res)
},
fail(err) {
console.log('事务开启失败', err)
}
})
executeSql(options)
说明 执行建表、插入、更新、删除等非查询 SQL。多条 SQL 请传数组。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqlOperationOptions | 是 | SQL 执行参数 | 无 | name / sql / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.sql | string | Array |
是 | SQL 字符串或 SQL 数组 | 无 | 无 |
| options.success | function | 否 | 执行成功回调 | 无 | 无 |
| options.fail | function | 否 | 执行失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| affectedRows | number | 影响行数 |
| insertId | number | 最近插入 ID |
| statementCount | number | 执行语句数量 |
| lastSql | string | 最后一条 SQL |
示例
// 执行建表和清理数据,多条 SQL 可以使用数组。
executeSql({
name: 'demo',
sql: [
'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
'DELETE FROM users'
],
success(res) {
console.log('SQL 执行成功', res)
},
fail(err) {
console.log('SQL 执行失败', err)
}
})
selectSql(options)
说明 执行查询 SQL,成功回调返回行数组。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqlOperationOptions | 是 | 查询参数 | 无 | name / sql / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.sql | string | 是 | 查询 SQL | 无 | 无 |
| options.success | function | 否 | 查询成功回调 | 无 | 无 |
| options.fail | function | 否 | 查询失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| rows | Array<object> | 成功回调参数为查询结果数组 |
示例
// 执行普通查询 SQL,success 回调参数是结果行数组。
selectSql({
name: 'demo',
sql: 'SELECT * FROM users ORDER BY id DESC',
success(rows) {
console.log('查询结果', rows)
},
fail(err) {
console.log('查询失败', err)
}
})
getDatabasePath(name)
说明 获取当前平台的数据库路径。App 端返回沙盒内真实路径,Web/小程序返回降级标识路径。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| name | string | 是 | 数据库名称 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| return | string | 数据库路径或降级标识路径 |
示例
// 获取当前平台下 demo 数据库的实际路径或降级标识路径。
const path = getDatabasePath('demo')
console.log('数据库路径', path)
executePrepared(options)
说明
执行带 ? 占位符的参数化 SQL,用于避免字符串拼接带来的 SQL 注入风险。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | PreparedSqlOptions | 是 | 参数化 SQL 参数 | 无 | name / sql / params / query / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.sql | string | 是 | 包含 ? 占位符的 SQL |
无 | 无 |
| options.params | Array |
否 | 绑定参数,按占位符顺序绑定 | [] |
无 |
| options.query | boolean | 否 | 是否按查询执行 | false |
true / false |
| options.success | function | 否 | 成功回调,查询返回行数组,非查询返回执行摘要 | 无 | 无 |
| options.fail | function | 否 | 失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| rows | Array<object> | query=true 时成功回调参数为行数组 |
| name | string | query=false 时返回数据库名称 |
| affectedRows | number | query=false 时返回影响行数 |
| insertId | number | query=false 时返回最近插入 ID |
示例
// 使用 ? 占位符做参数化写入,避免 SQL 注入风险。
executePrepared({
name: 'demo',
sql: 'INSERT INTO users (name, age) VALUES (?, ?)',
params: ['Alice', 30],
query: false,
success(res) {
console.log('参数化写入成功', res)
},
fail(err) {
console.log('参数化写入失败', err)
}
})
batch(options)
说明
批量执行 SQL,可选择事务包裹和失败回滚。每个条目都支持 ? 参数。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | BatchSqlOptions | 是 | 批处理参数 | 无 | name / items / transaction / rollbackOnFail / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.items | Array |
是 | SQL 条目列表 | 无 | 无 |
| options.items[].sql | string | 是 | SQL 语句 | 无 | 无 |
| options.items[].params | Array |
否 | 参数数组 | [] |
无 |
| options.items[].query | boolean | 否 | 是否按查询执行 | false |
true / false |
| options.transaction | boolean | 否 | 是否用事务包裹 | true |
true / false |
| options.rollbackOnFail | boolean | 否 | 失败时是否回滚 | true |
true / false |
| options.success | function | 否 | 执行成功回调 | 无 | 无 |
| options.fail | function | 否 | 执行失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| count | number | 执行条目数量 |
| results | Array |
每条 SQL 的结果 |
示例
// 使用事务批量执行多条参数化 SQL,失败时自动回滚。
batch({
name: 'demo',
transaction: true,
rollbackOnFail: true,
items: [
{ sql: 'INSERT INTO users (name, age) VALUES (?, ?)', params: ['Bob', 25] },
{ sql: 'INSERT INTO users (name, age) VALUES (?, ?)', params: ['Charlie', 35] }
],
success(res) {
console.log('批处理成功', res)
},
fail(err) {
console.log('批处理失败', err)
}
})
selectRows(options)
说明
执行结构化查询。插件会把 table / columns / where / groupBy / having / orderBy / limit / offset 转成参数化查询 SQL。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SelectRowsOptions | 是 | 结构化查询参数 | 无 | name / table / columns / where / whereParams / groupBy / having / havingParams / orderBy / limit / offset / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.table | string | 是 | 表名 | 无 | 无 |
| options.columns | Array |
否 | 查询字段或表达式 | ['*'] |
无 |
| options.where | string / Array |
否 | where 条件,支持片段或对象式条件数组 | 无 | = / != / > / >= / < / <= / LIKE / IN / BETWEEN / IS NULL / IS NOT NULL |
| options.whereParams | Array |
否 | where 片段参数 | [] |
无 |
| options.groupBy | string / Array |
否 | 分组字段 | 无 | 无 |
| options.having | string | 否 | having 片段 | 无 | 无 |
| options.havingParams | Array |
否 | having 参数 | [] |
无 |
| options.orderBy | string / Array |
否 | 排序配置 | 无 | ASC / DESC |
| options.limit | number | 否 | 返回条数 | 无 | 无 |
| options.offset | number | 否 | 分页偏移量 | 无 | 无 |
| options.success | function | 否 | 查询成功回调 | 无 | 无 |
| options.fail | function | 否 | 查询失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| rows | Array<object> | 成功回调参数为查询结果数组 |
示例
// 使用结构化配置完成 where、排序和分页查询。
selectRows({
name: 'demo',
table: 'users',
columns: ['id', 'name', 'age'],
where: [
{ column: 'age', op: '>=', value: 18 },
{ column: 'name', op: 'LIKE', value: 'A%' }
],
orderBy: [{ column: 'id', direction: 'DESC' }],
limit: 10,
offset: 0,
success(rows) {
console.log('结构化查询结果', rows)
}
})
insertRow(options)
说明
执行结构化单行新增。字段和值通过 values 数组传入,值会通过 ? 参数绑定。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | InsertRowOptions | 是 | 结构化新增参数 | 无 | name / table / values / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.table | string | 是 | 表名 | 无 | 无 |
| options.values | Array |
是 | 字段和值列表 | 无 | 无 |
| options.success | function | 否 | 新增成功回调 | 无 | 无 |
| options.fail | function | 否 | 新增失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| affectedRows | number | 影响行数 |
| insertId | number | 最近插入 ID |
| statementCount | number | 执行语句数量 |
| lastSql | string | 生成后的 SQL |
示例
// 使用字段数组新增单行数据,字段值自动参数化绑定。
insertRow({
name: 'demo',
table: 'users',
values: [
{ column: 'name', value: 'Alice' },
{ column: 'age', value: 30 }
],
success(res) {
console.log('结构化新增成功', res)
}
})
updateRows(options)
说明
执行结构化更新。默认必须传入 where,如果确实需要更新全表,必须显式传 allowAll: true。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | UpdateRowsOptions | 是 | 结构化更新参数 | 无 | name / table / values / where / whereParams / allowAll / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.table | string | 是 | 表名 | 无 | 无 |
| options.values | Array |
是 | 要更新的字段和值 | 无 | 无 |
| options.where | string / Array |
否 | 更新条件 | 无 | = / != / > / >= / < / <= / LIKE / IN / BETWEEN / IS NULL / IS NOT NULL |
| options.whereParams | Array |
否 | where 片段参数 | [] |
无 |
| options.allowAll | boolean | 否 | 无 where 时是否允许更新全表 | false |
true / false |
| options.success | function | 否 | 更新成功回调 | 无 | 无 |
| options.fail | function | 否 | 更新失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| affectedRows | number | 影响行数 |
| insertId | number | 最近插入 ID |
| statementCount | number | 执行语句数量 |
| lastSql | string | 生成后的 SQL |
示例
// 更新时建议始终传 where,避免误操作全表。
updateRows({
name: 'demo',
table: 'users',
values: [{ column: 'status', value: 'vip' }],
where: [{ column: 'age', op: '>=', value: 30 }],
success(res) {
console.log('结构化更新成功', res)
}
})
deleteRows(options)
说明
执行结构化删除。默认必须传入 where,如果确实需要删除全表,必须显式传 allowAll: true。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DeleteRowsOptions | 是 | 结构化删除参数 | 无 | name / table / where / whereParams / allowAll / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.table | string | 是 | 表名 | 无 | 无 |
| options.where | string / Array |
否 | 删除条件 | 无 | = / != / > / >= / < / <= / LIKE / IN / BETWEEN / IS NULL / IS NOT NULL |
| options.whereParams | Array |
否 | where 片段参数 | [] |
无 |
| options.allowAll | boolean | 否 | 无 where 时是否允许删除全表 | false |
true / false |
| options.success | function | 否 | 删除成功回调 | 无 | 无 |
| options.fail | function | 否 | 删除失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| affectedRows | number | 影响行数 |
| insertId | number | 最近插入 ID |
| statementCount | number | 执行语句数量 |
| lastSql | string | 生成后的 SQL |
示例
// 删除建议传明确 where;全表删除必须传 allowAll: true。
deleteRows({
name: 'demo',
table: 'users',
where: [{ column: 'status', op: '=', value: 'inactive' }],
success(res) {
console.log('结构化删除成功', res)
}
})
batchCrud(options)
说明
执行结构化批量增删查改。插件会先把每个条目转换为参数化 SQL,再复用 batch 的事务和回滚能力。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | BatchCrudOptions | 是 | 结构化批量参数 | 无 | name / items / transaction / rollbackOnFail / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.items | Array |
是 | 批量条目 | 无 | 无 |
| options.items[].action | string | 是 | 当前动作 | 无 | select / insert / update / delete |
| options.items[].table | string | 是 | 表名 | 无 | 无 |
| options.items[].columns | Array |
否 | 查询字段,仅 select 使用 | ['*'] |
无 |
| options.items[].values | Array |
否 | 新增或更新字段值 | 无 | 无 |
| options.items[].where | string / Array |
否 | where 条件 | 无 | 无 |
| options.items[].allowAll | boolean | 否 | update/delete 无 where 时是否允许全表操作 | false |
true / false |
| options.transaction | boolean | 否 | 是否用事务包裹 | true |
true / false |
| options.rollbackOnFail | boolean | 否 | 失败时是否回滚 | true |
true / false |
| options.success | function | 否 | 执行成功回调 | 无 | 无 |
| options.fail | function | 否 | 执行失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| count | number | 执行条目数量 |
| results | Array |
每条结构化 SQL 的执行结果 |
示例
// 使用 batchCrud 在事务中执行结构化新增和查询。
batchCrud({
name: 'demo',
transaction: true,
rollbackOnFail: true,
items: [
{
action: 'insert',
table: 'users',
values: [
{ column: 'name', value: 'Bob' },
{ column: 'age', value: 25 }
]
},
{
action: 'select',
table: 'users',
where: [{ column: 'age', op: '>=', value: 18 }],
orderBy: [{ column: 'id', direction: 'DESC' }],
limit: 10
}
],
success(res) {
console.log('结构化批量结果', res.results)
}
})
runMigrations(options)
说明 按版本顺序执行迁移脚本,并把已执行版本记录到迁移表中。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | MigrationOptions | 是 | 迁移参数 | 无 | name / migrations / tableName / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.migrations | Array |
是 | 迁移脚本列表 | 无 | 无 |
| options.migrations[].version | number | 是 | 目标版本号,必须大于 0 | 无 | 无 |
| options.migrations[].name | string | 否 | 版本说明 | 无 | 无 |
| options.migrations[].sql | Array |
是 | 当前版本要执行的 SQL 列表 | 无 | 无 |
| options.tableName | string | 否 | 迁移记录表名 | lizhao_sqlite_schema_migrations |
无 |
| options.success | function | 否 | 迁移成功回调 | 无 | 无 |
| options.fail | function | 否 | 迁移失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| fromVersion | number | 迁移前版本 |
| toVersion | number | 迁移后版本 |
| appliedVersions | Array |
本次执行的版本列表 |
示例
// 按版本顺序执行迁移脚本,已执行版本会被记录。
runMigrations({
name: 'demo',
migrations: [
{
version: 1,
name: 'create-settings',
sql: ['CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT)']
},
{
version: 2,
name: 'seed-settings',
sql: ["INSERT OR REPLACE INTO settings (key, value) VALUES ('demo_version', '2')"]
}
],
success(res) {
console.log('迁移成功', res)
},
fail(err) {
console.log('迁移失败', err)
}
})
backupDatabase(options)
说明 备份数据库文件。App 原生平台需要传入应用可访问的目标路径;Web/小程序降级平台没有真实数据库文件,会触发失败回调。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseFileOptions | 是 | 备份参数 | 无 | name / path / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.path | string | 是 | 备份目标文件路径 | 无 | 无 |
| options.success | function | 否 | 备份成功回调 | 无 | 无 |
| options.fail | function | 否 | 备份失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| sourcePath | string | 源数据库路径 |
| targetPath | string | 目标备份路径 |
| success | boolean | 是否成功 |
示例
// 备份 demo 数据库到同目录 .bak 文件。
backupDatabase({
name: 'demo',
path: getDatabasePath('demo') + '.bak',
success(res) {
console.log('备份成功', res)
},
fail(err) {
console.log('备份失败', err)
}
})
restoreDatabase(options)
说明 从备份文件恢复数据库。部分平台恢复时会关闭当前连接,再替换数据库文件。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseFileOptions | 是 | 恢复参数 | 无 | name / path / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.path | string | 是 | 备份源文件路径 | 无 | 无 |
| options.success | function | 否 | 恢复成功回调 | 无 | 无 |
| options.fail | function | 否 | 恢复失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| sourcePath | string | 备份源路径 |
| targetPath | string | 恢复目标路径 |
| success | boolean | 是否成功 |
示例
// 从 .bak 备份文件恢复 demo 数据库。
restoreDatabase({
name: 'demo',
path: getDatabasePath('demo') + '.bak',
success(res) {
console.log('恢复成功', res)
},
fail(err) {
console.log('恢复失败', err)
}
})
exportDatabase(options)
说明
导出数据库为稳定 JSON 文本。JSON 顶层包含 format / schema / tables / rows,可以保存到业务文件,也可以直接传给 importDatabase({ data }) 做恢复。App 端会导出真实表结构和行数据;Web/小程序降级端导出当前内存 SQL 子集中的表数据。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseTransferOptions | 是 | 导出参数 | 无 | name / path / data / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.path | string | 否 | 可选目标路径;Android/iOS 会尝试把 JSON 写入该路径,Harmony 主要通过 data 返回 |
无 | 无 |
| options.data | string | 否 | 导出时通常不用传,保留给统一参数结构 | 无 | 无 |
| options.success | function | 否 | 导出成功回调 | 无 | 无 |
| options.fail | function | 否 | 导出失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 数据库路径或导出路径 |
| data | string | 导出的 lizhao-sqlite-pro-json JSON 文本 |
| tableCount | number | 导出表数量 |
示例
// 导出稳定 JSON 文本,data 可直接用于 importDatabase。
exportDatabase({
name: 'demo',
success(res) {
console.log('JSON 导出成功', res.tableCount, res.data)
},
fail(err) {
console.log('导出失败', err)
}
})
importDatabase(options)
说明
导入数据库。优先支持 data 传入 lizhao-sqlite-pro-json 文本,插件会按 JSON 中的 tables 重建表并写入行数据。Android/iOS 也支持 path 指向 JSON 文件;如果 path 指向普通数据库备份文件,则按文件恢复兜底处理。Web/小程序降级端支持导入自身导出的 JSON 数据。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | DatabaseTransferOptions | 是 | 导入参数 | 无 | name / path / data / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.path | string | 否 | 导入源文件路径;可为 JSON 文件或数据库备份文件 | 无 | 无 |
| options.data | string | 否 | 导入 JSON 文本,优先级高于 path |
无 | 无 |
| options.success | function | 否 | 导入成功回调 | 无 | 无 |
| options.fail | function | 否 | 导入失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 导入后的数据库路径 |
| data | string | 本次导入使用的 JSON 文本;文件恢复兜底时为空 |
| tableCount | number | JSON 导入表数量;文件恢复兜底时为 -1 |
示例
// 先导出 JSON,再把同一份 JSON 导入回数据库。
exportDatabase({
name: 'demo',
success(exportRes) {
importDatabase({
name: 'demo',
data: exportRes.data,
success(importRes) {
console.log('JSON 导入成功', importRes.tableCount)
},
fail(err) {
console.log('JSON 导入失败', err)
}
})
},
fail(err) {
console.log('JSON 导出失败', err)
}
})
configureDatabase(options)
说明
配置数据库常用 PRAGMA。建议在 openDatabase 成功后调用,用于启用外键、WAL、忙碌等待和同步级别。Web/小程序降级端会明确返回已降级说明,不伪造原生 PRAGMA 生效。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqlitePragmaOptions | 是 | PRAGMA 配置参数 | 无 | name / foreignKeys / journalMode / busyTimeoutMs / synchronous / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.foreignKeys | boolean | 否 | 是否启用外键约束 | 无 | true / false |
| options.journalMode | string | 否 | 日志模式 | 无 | WAL / DELETE / TRUNCATE / PERSIST / MEMORY / OFF |
| options.busyTimeoutMs | number | 否 | 数据库忙碌等待时间,单位毫秒 | 无 | 无 |
| options.synchronous | string | 否 | 同步级别 | 无 | NORMAL / FULL / OFF / EXTRA |
| options.success | function | 否 | 配置成功回调 | 无 | 无 |
| options.fail | function | 否 | 配置失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| applied | Array |
本次实际应用的 PRAGMA 项 |
| values | UTSJSONObject | 应用后的配置摘要或降级说明 |
示例
// 打开数据库后配置常用稳定性参数。
configureDatabase({
name: 'demo',
foreignKeys: true,
journalMode: 'WAL',
busyTimeoutMs: 3000,
synchronous: 'NORMAL',
success(res) {
console.log('PRAGMA 配置成功', res)
}
})
inspectDatabase(options)
说明 检查数据库结构,返回表数量、建表 SQL、列名、行数和可选样例行。适合发布前自检、售后排查、导出前确认表结构。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqliteInspectionOptions | 是 | 结构检查参数 | 无 | name / includeSampleRows / sampleLimit / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.includeSampleRows | boolean | 否 | 是否返回每张表的样例行 | false |
true / false |
| options.sampleLimit | number | 否 | 样例行数量 | 3 |
无 |
| options.success | function | 否 | 检查成功回调 | 无 | 无 |
| options.fail | function | 否 | 检查失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 数据库路径或降级路径 |
| tableCount | number | 表数量 |
| tables | Array |
表结构摘要列表 |
示例
// 检查表结构并返回少量样例数据。
inspectDatabase({
name: 'demo',
includeSampleRows: true,
sampleLimit: 2,
success(res) {
console.log('数据库结构', res.tables)
}
})
runHealthCheck(options)
说明
运行数据库健康检查。App 端执行 PRAGMA quick_check 或 PRAGMA integrity_check,并可返回表统计和警告信息;Web/小程序降级端返回内存表状态。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | SqliteHealthCheckOptions | 是 | 健康检查参数 | 无 | name / fullCheck / includeTableStats / success / fail / complete |
| options.name | string | 是 | 数据库名称 | 无 | 无 |
| options.fullCheck | boolean | 否 | 是否执行完整 integrity_check,否则执行 quick_check |
false |
true / false |
| options.includeTableStats | boolean | 否 | 是否返回表行数统计 | true |
true / false |
| options.success | function | 否 | 检查成功回调 | 无 | 无 |
| options.fail | function | 否 | 检查失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据库名称 |
| path | string | 数据库路径或降级路径 |
| ok | boolean | 检查是否通过 |
| integrity | string | quick_check 或 integrity_check 结果 |
| databaseSize | number | 数据库文件大小;无法统计时为 0 |
| tableCount | number | 表数量 |
| tableStats | Array |
表级统计 |
| warnings | Array |
警告信息 |
示例
// 快速检查数据库是否健康。
runHealthCheck({
name: 'demo',
fullCheck: false,
includeTableStats: true,
success(res) {
console.log('健康检查', res.ok, res.integrity, res.warnings)
}
})
getCapabilities()
说明 获取当前平台能力矩阵,用于区分 App 原生 SQLite、Web/小程序降级 SQL 子集和自定义基座要求。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| 无 | 无 | 否 | 该方法不接收参数 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| supported | boolean | 当前平台是否提供可用能力 |
| platform | string | 平台标识 |
| adapter | string | 底层适配器 |
| nativeSqlite | boolean | 是否为原生 SQLite 文件数据库 |
| persistent | boolean | 是否持久化 |
| parameterized | boolean | 是否支持参数化 SQL |
| transaction | boolean | 是否支持事务 |
| migration | boolean | 是否支持迁移 |
| backupRestore | boolean | 是否支持备份恢复 |
| importExport | boolean | 是否支持导入导出 |
| jsonExportImport | boolean | 是否支持 lizhao-sqlite-pro-json 导出导入 |
| healthCheck | boolean | 是否支持健康检查 |
| pragmaConfig | boolean | 是否支持 PRAGMA 配置 |
| schemaInspection | boolean | 是否支持结构检查 |
| diagnostics | boolean | 是否支持诊断 |
| requiresCustomBase | boolean | 是否需要自定义基座或原生联编 |
| reason | string | 降级或限制原因 |
示例
// 读取当前平台能力矩阵,用于判断是否为原生 SQLite。
const capabilities = getCapabilities()
console.log('能力矩阵', capabilities)
getDiagnostics(options)
说明 获取中文诊断快照,包括插件版本、平台适配器、已打开数据库和最近日志。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | GetDiagnosticsOptions | 否 | 诊断参数 | { includeLogs: true } |
includeLogs / success / fail / complete |
| options.includeLogs | boolean | 否 | 是否返回最近诊断明细 | true |
true / false |
| options.success | function | 否 | 保留字段,当前同步返回诊断结果 | 无 | 无 |
| options.fail | function | 否 | 保留字段 | 无 | 无 |
| options.complete | function | 否 | 保留字段 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| plugin | string | 插件名 |
| version | string | 插件版本 |
| platform | string | 平台标识 |
| adapter | string | 底层适配器 |
| openedDatabases | Array |
当前已打开数据库名 |
| logs | Array |
最近诊断日志 |
示例
// 读取诊断快照,includeLogs=true 会返回最近诊断日志。
const diagnostics = getDiagnostics({ includeLogs: true })
console.log('诊断日志', diagnostics)
clearDiagnostics()
说明 清空插件内部诊断日志。
参数
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| 无 | 无 | 否 | 该方法不接收参数 | 无 | 无 |
返回值
| 字段 | 类型 | 说明 |
|---|---|---|
| return | void | 无返回值 |
示例
// 清空插件内部诊断日志。
clearDiagnostics()
console.log('诊断日志已清空')
完整功能演示
下面示例覆盖插件全部公开 API,适合作为项目接入后的回归演示。Web/小程序会按能力矩阵降级;备份恢复和部分导入能力在降级平台会触发 fail / complete,不会伪造成功。
// 完整回归示例:覆盖兼容 API、增强 API、迁移、备份恢复和诊断日志。
import {
openDatabase,
isOpenDatabase,
closeDatabase,
transaction,
executeSql,
selectSql,
getDatabasePath,
executePrepared,
batch,
selectRows,
insertRow,
updateRows,
deleteRows,
batchCrud,
runMigrations,
backupDatabase,
restoreDatabase,
exportDatabase,
importDatabase,
configureDatabase,
inspectDatabase,
runHealthCheck,
getCapabilities,
getDiagnostics,
clearDiagnostics
} from '@/uni_modules/lizhao-sqlite-pro'
const dbName = 'lizhao_sqlite_pro_demo'
const dbPath = getDatabasePath(dbName)
const backupPath = dbPath + '.bak'
// 统一打印示例日志,方便在控制台筛选插件输出。
function logResult(label: string, value: any) {
console.log('[lizhao-sqlite-pro]', label, value)
}
// 统一包装 success / fail / complete,确保示例保留真实回调路径。
function callSqlite(label: string, options: any, invoke: (opts: any) => void): Promise<any> {
return new Promise((resolve) => {
let settled = false
// 只用 success/fail 决定 Promise 结果,complete 仅记录日志。
const done = (ok: boolean, payload: any) => {
if (settled) return
settled = true
resolve({ ok, payload })
}
invoke({
...options,
success(res: any) {
logResult(label + ' success', res)
done(true, res)
},
fail(err: any) {
logResult(label + ' fail', err)
done(false, err)
},
complete(res: any) {
logResult(label + ' complete', res)
}
})
})
}
// 一键运行全部核心能力,适合作为接入后的回归脚本。
export async function runLizhaoSqliteProDemo() {
// 先清空旧诊断,避免历史日志干扰本次演示。
clearDiagnostics()
logResult('getCapabilities', getCapabilities())
logResult('getDatabasePath', dbPath)
// 打开数据库后再执行建表、写入和查询。
const opened = await callSqlite('openDatabase', { name: dbName }, openDatabase)
const openStatus = isOpenDatabase({
name: dbName,
success(res) {
logResult('isOpenDatabase success', res)
},
complete(res) {
logResult('isOpenDatabase complete', res)
}
})
logResult('isOpenDatabase return', openStatus)
if (!opened.ok) return
// 初始化演示表,并清理上一次运行留下的数据。
await callSqlite('executeSql create', {
name: dbName,
sql: [
'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
'CREATE TABLE IF NOT EXISTS audit_logs (id INTEGER PRIMARY KEY AUTOINCREMENT, action TEXT, created_at INTEGER)',
'DELETE FROM users',
'DELETE FROM audit_logs'
]
}, executeSql)
// 手动演示事务 begin -> 参数化写入 -> commit/rollback。
await callSqlite('transaction begin', { name: dbName, operation: 'begin' }, transaction)
const insertResult = await callSqlite('executePrepared insert', {
name: dbName,
sql: 'INSERT INTO users (name, age) VALUES (?, ?)',
params: ['Alice', 30],
query: false
}, executePrepared)
await callSqlite(insertResult.ok ? 'transaction commit' : 'transaction rollback', {
name: dbName,
operation: insertResult.ok ? 'commit' : 'rollback'
}, transaction)
// 批处理会在事务中连续执行多条参数化 SQL。
await callSqlite('batch', {
name: dbName,
transaction: true,
rollbackOnFail: true,
items: [
{ sql: 'INSERT INTO users (name, age) VALUES (?, ?)', params: ['Bob', 25] },
{ sql: 'INSERT INTO users (name, age) VALUES (?, ?)', params: ['Charlie', 35] },
{ sql: 'INSERT INTO audit_logs (action, created_at) VALUES (?, ?)', params: ['batch-insert', Date.now()] }
]
}, batch)
// 迁移脚本会按版本记录,重复执行不会重复应用旧版本。
await callSqlite('runMigrations', {
name: dbName,
migrations: [
{
version: 1,
name: 'create-settings',
sql: ['CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT)']
},
{
version: 2,
name: 'seed-settings',
sql: ["INSERT OR REPLACE INTO settings (key, value) VALUES ('demo_version', '2')"]
}
]
}, runMigrations)
// 分别验证参数化查询和普通 selectSql 查询。
await callSqlite('executePrepared query', {
name: dbName,
sql: 'SELECT * FROM users WHERE age >= ?',
params: [25],
query: true
}, executePrepared)
await callSqlite('selectSql', {
name: dbName,
sql: 'SELECT * FROM users'
}, selectSql)
// 结构化 CRUD 会生成参数化 SQL,业务侧不用拼完整 SELECT/INSERT/UPDATE/DELETE。
await callSqlite('insertRow', {
name: dbName,
table: 'users',
values: [
{ column: 'name', value: 'Daisy' },
{ column: 'age', value: 28 }
]
}, insertRow)
await callSqlite('selectRows', {
name: dbName,
table: 'users',
columns: ['id', 'name', 'age'],
where: [
{ column: 'age', op: '>=', value: 18 },
{ column: 'name', op: 'LIKE', value: 'D%' }
],
orderBy: [{ column: 'id', direction: 'DESC' }],
limit: 10,
offset: 0
}, selectRows)
await callSqlite('updateRows', {
name: dbName,
table: 'users',
values: [{ column: 'age', value: 29 }],
where: 'name = ?',
whereParams: ['Daisy']
}, updateRows)
await callSqlite('deleteRows', {
name: dbName,
table: 'users',
where: [{ column: 'name', op: '=', value: 'nobody' }]
}, deleteRows)
await callSqlite('batchCrud', {
name: dbName,
transaction: true,
rollbackOnFail: true,
items: [
{
action: 'insert',
table: 'users',
values: [
{ column: 'name', value: 'Eve' },
{ column: 'age', value: 32 }
]
},
{
action: 'select',
table: 'users',
where: [{ column: 'age', op: 'BETWEEN', values: [25, 40] }],
orderBy: [{ column: 'age', direction: 'DESC' }],
limit: 5
}
]
}, batchCrud)
// 打开后配置 PRAGMA,常见生产设置包括外键、WAL 和 busy timeout。
await callSqlite('configureDatabase', {
name: dbName,
foreignKeys: true,
journalMode: 'WAL',
busyTimeoutMs: 3000,
synchronous: 'NORMAL'
}, configureDatabase)
// 导出前先检查结构,必要时带少量样例行辅助排查。
await callSqlite('inspectDatabase', {
name: dbName,
includeSampleRows: true,
sampleLimit: 2
}, inspectDatabase)
// 健康检查用于确认数据库 quick_check/integrity_check 状态。
await callSqlite('runHealthCheck', {
name: dbName,
fullCheck: false,
includeTableStats: true
}, runHealthCheck)
// App 原生端可验证文件备份恢复,降级端会进入 fail/complete。
const exported = await callSqlite('exportDatabase', { name: dbName }, exportDatabase)
if (exported.ok) {
await callSqlite('importDatabase json', { name: dbName, data: exported.payload.data }, importDatabase)
}
await callSqlite('backupDatabase', { name: dbName, path: backupPath }, backupDatabase)
await callSqlite('restoreDatabase', { name: dbName, path: backupPath }, restoreDatabase)
await callSqlite('importDatabase file', { name: dbName, path: backupPath, data: '' }, importDatabase)
// 演示结束前输出诊断,再清空诊断并关闭数据库。
logResult('getDiagnostics', getDiagnostics({ includeLogs: true }))
clearDiagnostics()
await callSqlite('closeDatabase', { name: dbName }, closeDatabase)
}
错误码
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9040001 | platform unsupported | 当前平台不支持完整 SQLite 能力 |
| 9040002 | invalid params | 参数不合法 |
| 9040003 | context unavailable | 运行时上下文不可用 |
| 9040004 | database not open | 数据库未打开 |
| 9040005 | database already open | 数据库已经打开 |
| 9040006 | open failed | 打开数据库失败 |
| 9040007 | close failed | 关闭数据库失败 |
| 9040008 | execute failed | SQL 执行失败 |
| 9040009 | query failed | 查询执行失败 |
| 9040010 | transaction failed | 事务执行失败 |
| 9040011 | migration failed | 迁移执行失败 |
| 9040012 | file operation failed | 文件操作失败 |
| 9040013 | fallback unsupported sql | 降级存储不支持该 SQL |
演示组件
<template>
<!-- 在页面中直接使用插件演示组件。 -->
<lizhao-sqlite-pro />
</template>
组件采用 easycom 同名双入口,无需手动 import:
- uni-app:
uni_modules/lizhao-sqlite-pro/components/lizhao-sqlite-pro/lizhao-sqlite-pro.vue - uni-app x:
uni_modules/lizhao-sqlite-pro/components/lizhao-sqlite-pro/lizhao-sqlite-pro.uvue
uni-app x 会优先编译 .uvue 强类型组件;uni-app 继续使用原 .vue,两端共享相同公开 API 和完整能力按钮,但互不混用页面脚本语法。
1.0.15 曾使用组件本地 Demo* 类型与 Array<any> 桥接,但插件市场消费者编译器仍会拒绝把 UTSArray<Any> 赋给插件强类型数组。1.0.16 改为从插件根目录显式导入 BatchSqlItem / BatchCrudItem / MigrationItem,让数组、对象和公开 Options 使用同一插件模块类型身份;公开 API 与运行语义均未改变。
本修复只影响消费者 UTS 编译,不包含原生实现、权限、依赖或资源变更,因此使用此前 HBuilderX 5.15 制作的自定义基座即可重新编译验证,无需仅为 1.0.16 重打基座。
1.0.17 只在 utssdk/web/index.uts 补齐上述四个纯类型的 export type 转发。Web 编译器可以据此在编译期解析组件类型并擦除对应导入,不再向浏览器 ESM 请求不存在的运行时导出;Android/iOS/Harmony/小程序实现、公开 Options 和 uni-app .vue 组件均未改变,也无需为本次 Web 修复重打 App 自定义基座。
插件市场加密链还要求 Web 平台入口本地能够解析全部消费者类型;1.0.17 只补 export type 后,市场加密包仍可能把 SqlTransactionOperation 保留成运行时 named import。1.0.18 进一步把 SqlTransactionOperation / BatchSqlItem / BatchCrudItem / MigrationItem / DatabaseTransferResult 补入同一入口的 import type,让 23 个内置组件/示例类型在 import/export 两侧完整对称。该修改仍只属于 Web 编译期声明,不改变任何平台 API 或运行语义。
1.0.18 发布后的另一账号实测证明,仅补齐 Web .uts 类型声明仍无法穿过收费插件加密链。1.0.19 将 Web 降级实现隔离为自包含 utssdk/web/index.js,并对 interface.uts 全部 69 个公开类型同时提供 JSDoc 类型合并和 ESM 兼容导出;真实 Web 发布不再出现缺失导出或值当类型 warning。
市场 Web 的最终验收必须在上传 1.0.19 后,由测试账号删除旧插件、重新下载并确认版本,再运行 Web;本地源码发布和浏览器结果不能替代市场分发产物证据。
注意事项
- App 端 SQL 语句不要用分号拼接多条命令,多条命令请传数组或使用
batch。 - Web/小程序降级能力只适合演示、轻量缓存和接口连通性测试,不可当作完整 SQLite 文件数据库。
- Web/小程序普通错误对象不会继承
UniError,但会保留errSubject / errCode / errMsg / details,业务侧仍按fail(err)读取错误信息。 - 受限平台或受限 SQL 会进入
fail / complete;插件承诺不伪造成功,也不会把降级结果宣传为完整 SQLite。 exportDatabase返回稳定lizhao-sqlite-pro-json文本,包含schema / tables / rows,可直接作为importDatabase({ data })的输入。importDatabase优先使用dataJSON 导入;传path时 Android/iOS 会优先尝试读取 JSON 文件,普通数据库文件仍可走文件恢复兜底。- JSON 导出适合调试、迁移和小规模数据搬迁;大体量数据库仍建议使用
backupDatabase/restoreDatabase做文件级备份恢复。 - Harmony 使用 rdbStore 原生关系型数据库,
backupDatabase/restoreDatabase走 rdbStore 自带备份恢复;如需跨应用任意路径导入导出,请先用平台文件能力把文件放到应用可访问路径。
作者系列UTS插件
以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6485
赞赏 5
下载 12455388
赞赏 1935
赞赏
京公网安备:11010802035340号