更新记录
1.0.0(2026-11-09)
- 初始版本 zv-sqlite:App-Plus(Android/iOS
plus.sqlite)+ 鸿蒙(RelationalStore UTS 桥)
- Schema 迁移:
getVersion / setVersion / migrate([{ version, up }])
- 写入返回值:
insert / update / delete / upsert / replace → { lastInsertRowId, changes }
- upsert:
ON CONFLICT ... DO UPDATE|DO NOTHING;replace:INSERT OR REPLACE
- 复杂 where:
$and / $or / $not 可嵌套;保留运算符 in/between/like 等
- 索引:
createIndex / dropIndex;getTableInfo
- 请求串行队列,降低并发踩坑;
debug: true 打 SQL 日志
平台兼容性
uni-app(4.36)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
- |
- |
- |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
zv-sqlite
本地 SQLite 封装:
请先试用,确认正常后再购买
| 平台 |
引擎 |
| App Android / iOS |
plus.sqlite(manifest 勾选 SQLite) |
| 鸿蒙 |
UTS + @kit.ArkData RelationalStore |
H5 / 小程序不可用。请用 自定义基座 / 云打包。
安装与导入
// 推荐:业务 API 在 js_sdk(Android / iOS / 鸿蒙同一套)
import db, { ZvSqlite } from '@/uni_modules/zv-sqlite/js_sdk'
模块根路径在 UTS 编译下主要导出鸿蒙桥 zvDb*;日常请走 js_sdk。
快速开始
import db from '@/uni_modules/zv-sqlite/js_sdk'
await db.open({ name: 'zv_db', path: '_doc/zv_db.db', debug: false })
await db.migrate([
{
version: 1,
async up(database) {
await database.createTable('user', {
id: 'INTEGER PRIMARY KEY AUTOINCREMENT',
name: 'TEXT NOT NULL',
age: 'INTEGER DEFAULT 0',
status: 'INTEGER DEFAULT 1'
})
await database.createIndex('user', ['status'], { name: 'idx_user_status' })
}
},
{
version: 2,
async up(database) {
await database.executeSql('ALTER TABLE user ADD COLUMN remark TEXT')
}
}
])
const r = await db.insert('user', { name: '张三', age: 18 })
console.log(r.lastInsertRowId, r.changes)
await db.upsert(
'user',
{ id: 1, name: '张三', age: 20, status: 1 },
{ conflictColumns: ['id'] }
)
const page = await db.selectPage('user', {
where: {
$or: [{ status: 1 }, { age: ['>=', 18] }],
$and: [{ name: ['like', '%张%'] }]
},
orderBy: { id: 'DESC' },
page: 1,
pageSize: 20
})
多库:new ZvSqlite({ name: 'log_db', path: '_doc/log.db' })。
API 摘要
库 / 迁移 / 索引
| 方法 |
说明 |
open / close / isOpen |
打开关闭 |
getVersion / setVersion |
版本号(Android/iOS:PRAGMA;鸿蒙:RdbStore.version) |
migrate([{ version, up }]) |
按版本升级,返回 { from, to, applied } |
createTable / dropTable / tableExists / clearTable |
表 |
createIndex / dropIndex / getTableInfo |
索引与结构 |
写入(均返回 { lastInsertRowId, changes },批量见各方法)
| 方法 |
说明 |
insert / insertBatch |
插入 |
upsert(table, data, { conflictColumns, update? }) |
冲突更新;update: false 为 DO NOTHING |
replace |
INSERT OR REPLACE |
update / updateAll / updateBatch |
更新(update 强制 where) |
delete / deleteBatch |
删除(强制 where) |
查询
| 方法 |
说明 |
select / selectOne / count / selectPage / selectBatch |
查询 |
executeSql / selectSql |
原生 SQL |
transaction(fn) |
自动事务 |
where
{ id: 1, age: ['>=', 18], name: ['like', '%张%'], status: ['in', [0, 1]] }
{ $or: [{ status: 1 }, { status: 2 }], age: ['>', 10] }
{ $and: [{ a: 1 }, { $or: [{ b: 2 }, { c: 3 }] }] }
{ $not: { status: 0 } }
注意
- Android/iOS:manifest → App 模块 → SQLite。
- where / 写入请优先用对象 API(自动转义)。
where 传字符串禁止含 ;;orderBy 字符串仅允许 col / col ASC|DESC。不要把不可信输入拼进 executeSql。
- Android 多条 SQL 用数组传
executeSql,勿用 ; 拼接。
- 鸿蒙库文件名取自
path 最后一段(如 _doc/zv_db.db → zv_db.db);版本与 lastInsertRowId/changes 已走兼容桥。
upsert 依赖 SQLite ON CONFLICT,冲突列需有 PRIMARY KEY / UNIQUE。
- 写操作已串行排队;
migrate 的 up 内勿再包一层 transaction(外层已包)。
License
MIT