更新记录

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 } }

注意

  1. Android/iOS:manifest → App 模块 → SQLite。
  2. where / 写入请优先用对象 API(自动转义)。where 传字符串禁止含 ;;orderBy 字符串仅允许 col / col ASC|DESC。不要把不可信输入拼进 executeSql。
  3. Android 多条 SQL 用数组传 executeSql,勿用 ; 拼接。
  4. 鸿蒙库文件名取自 path 最后一段(如 _doc/zv_db.db → zv_db.db);版本与 lastInsertRowId/changes 已走兼容桥。
  5. upsert 依赖 SQLite ON CONFLICT,冲突列需有 PRIMARY KEY / UNIQUE。
  6. 写操作已串行排队;migrate 的 up 内勿再包一层 transaction(外层已包)。

License

MIT

隐私、权限声明

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

无额外系统敏感权限。 Android/iOS 仅需在 manifest 勾选 SQLite 模块;数据写在应用私有目录。 鸿蒙使用系统 RelationalStore 本地库,无需额外网络/定位/通讯录等权限。

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

插件不采集任何数据

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

无

暂无用户评论。