更新记录
1.0.0(2026-09-03)
下载此版本
初版
平台兼容性
uni-app(3.8.3)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
- |
- |
- |
- |
- |
√ |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
其他
SQLite 通用操作工具 (SL-SqlLite.js)
基于 uni-app plus.sqlite 的 Promise 化 SQLite 操作工具,仅支持 App(5+) 环境。非 App 环境(H5 / 小程序)调用任何方法会自动 reject 并弹窗提示。
快速开始
import db from '@/SL-SqlLite/SL-SqlLite.js'
// 1. 打开数据库
await db.openDatabase('mydb.db', '_doc/')
db.setCurrentDBName('mydb.db')
// 2. 建表
await db.createTable('user', 'id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER')
// 3. 新增
await db.insert('user', { name: '张三', age: 25 })
// 4. 查询
const list = await db.selectAll('user', '*', null, 'id DESC')
const one = await db.selectOne('user', 'id = 1')
const cnt = await db.count('user', 'age > 20')
// 5. 修改
await db.update('user', { name: '李四', age: 30 }, 'id = 1')
// 6. 删除
await db.remove('user', 'id = 1')
// 7. 事务
await db.transaction(async () => {
await db.insert('user', { name: '王五', age: 28 })
await db.insert('user', { name: '赵六', age: 32 })
})
// 8. 关闭
await db.closeDatabase('mydb.db')
环境检测
if (!db.isApp()) {
const platform = db.getPlatformName() // 'H5' | '微信小程序' | ...
uni.showModal({ title: '提示', content: `当前为${platform},无法使用 SQLite` })
return
}
API 一览
数据库管理
| 方法 |
参数 |
返回值 |
说明 |
openDatabase(name, path) |
name: 库名如 'mydb.db';path: 存放路径默认 '_doc/' |
Promise |
打开/创建数据库 |
closeDatabase(name) |
name: 库名 |
Promise |
关闭数据库 |
isOpenDatabase(name) |
name: 库名 |
Promise<Boolean> |
判断是否已打开 |
setCurrentDBName(name) |
name: 库名 |
- |
设置当前操作的数据库名 |
getCurrentDBName() |
- |
String |
获取当前数据库名(未设置时抛错) |
原始 SQL
| 方法 |
参数 |
返回值 |
说明 |
executeSql(sql) |
完整 SQL 字符串 |
Promise |
执行 INSERT/UPDATE/DELETE/CREATE 等 |
selectSql(sql) |
完整 SELECT 语句 |
Promise<Array> |
查询,返回行数组 |
注意:plus.sqlite 不支持 ? 参数绑定,所有 SQL 需手动拼接完整值。便捷 CRUD 方法已内部处理。
便捷 CRUD
| 方法 |
参数 |
返回值 |
说明 |
insert(table, data) |
table: 表名;data: { col: val } |
Promise |
插入单条,值自动转义 |
insertBatch(table, dataList) |
dataList: [{ col: val }, ...] |
Promise |
批量插入,事务包裹 |
update(table, data, where) |
data: 更新字段;where: 如 'id = 5' |
Promise |
更新记录 |
remove(table, where) |
where: 如 'id = 1' |
Promise |
删除记录 |
selectAll(table, columns, where, orderBy, limit) |
均可选 |
Promise<Array> |
查询多条 |
selectOne(table, where) |
where: 条件 |
Promise<Object\|null> |
查询单条 |
count(table, where) |
where: 可选 |
Promise<Number> |
查询记录数 |
表结构
| 方法 |
参数 |
返回值 |
说明 |
createTable(table, definition) |
definition: 如 'id INTEGER PRIMARY KEY, name TEXT' |
Promise |
建表(IF NOT EXISTS) |
dropTable(table) |
表名 |
Promise |
删表(DROP IF EXISTS) |
事务
| 方法 |
参数 |
返回值 |
说明 |
transaction(fn) |
fn: async 函数,返回 Promise |
Promise |
自动 BEGIN/COMMIT/ROLLBACK |
await db.transaction(async () => {
await db.insert('account', { name: 'A', balance: 100 })
await db.insert('account', { name: 'B', balance: 200 })
// 若中途出错,自动 ROLLBACK,两条都不会写入
})
值转义说明
plus.sqlite.executeSql 不支持 ? 占位符绑定,工具内部通过 toSqlValue() 手动拼接:
| JS 类型 |
SQL 输出 |
示例 |
number |
原值 |
25 |
boolean |
1 / 0 |
1 |
string |
单引号包裹,内部 ' 转义为 '' |
'张三' |
null / undefined |
NULL |
NULL |
查询结果注意事项
plus.sqlite.selectSql 返回的是 native 代理对象,Vue 模板无法直接读取属性。查询后需浅拷贝为纯 JS 对象:
const rows = await db.selectAll('user')
// 推荐:浅拷贝后赋值给 Vue data
this.list = rows.map(r => ({ id: r.id, name: r.name, age: r.age }))
常见问题
-1402 Same Name Already Open
数据库已打开时重复调用 openDatabase 会报此错误。解决:先检查再打开。
const isOpen = await db.isOpenDatabase('mydb.db')
if (!isOpen) {
await db.openDatabase('mydb.db')
}
中文乱码
SQLite 原生支持 UTF-8 中文存储,无需特殊处理。若出现乱码通常是 HTML/JS 文件编码问题,确保 .vue / .js 文件以 UTF-8 无 BOM 保存。
非环境调用
非 App 环境下调用任何方法会自动弹窗提示并 reject,不会崩溃:
SQLite 仅支持 App 环境运行,当前为 H5,无法使用数据库功能
完整 API 导出
| 分类 |
方法 |
| 环境 |
isApp, getPlatformName |
| 数据库 |
openDatabase, closeDatabase, isOpenDatabase, setCurrentDBName, getCurrentDBName |
| SQL |
executeSql, selectSql |
| CRUD |
insert, insertBatch, update, remove, selectAll, selectOne, count |
| 表结构 |
createTable, dropTable |
| 事务 |
transaction |