☰
SQLite 通用操作工具 (SL-SqlLite.js)
2026/11/5 5:05:59 网站建设 项目流程

SQLite 通用操作工具 (SL-SqlLite.js)

插件市场
操作视频

基于 uni-appplus.sqlite的 Promise 化 SQLite 操作工具,仅支持App(5+)环境。非 App 环境(H5 / 小程序)调用任何方法会自动 reject 并弹窗提示。

快速开始

importdbfrom'@/SL-SqlLite/SL-SqlLite.js'// 1. 打开数据库awaitdb.openDatabase('mydb.db','_doc/')db.setCurrentDBName('mydb.db')// 2. 建表awaitdb.createTable('user','id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER')// 3. 新增awaitdb.insert('user',{name:'张三',age:25})// 4. 查询constlist=awaitdb.selectAll('user','*',null,'id DESC')constone=awaitdb.selectOne('user','id = 1')constcnt=awaitdb.count('user','age > 20')// 5. 修改awaitdb.update('user',{name:'李四',age:30},'id = 1')// 6. 删除awaitdb.remove('user','id = 1')// 7. 事务awaitdb.transaction(async()=>{awaitdb.insert('user',{name:'王五',age:28})awaitdb.insert('user',{name:'赵六',age:32})})// 8. 关闭awaitdb.closeDatabase('mydb.db')

环境检测

if(!db.isApp()){constplatform=db.getPlatformName()// 'H5' | '微信小程序' | ...uni.showModal({title:'提示',content:`当前为${platform},无法使用 SQLite`})return}
  • isApp()返回true时为 App 环境,false为其他平台

  • 非环境下调用任何数据库方法会自动弹窗提示并 reject,不会崩溃

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 函数,返回 PromisePromise自动 BEGIN/COMMIT/ROLLBACK
awaitdb.transaction(async()=>{awaitdb.insert('account',{name:'A',balance:100})awaitdb.insert('account',{name:'B',balance:200})// 若中途出错,自动 ROLLBACK,两条都不会写入})

值转义说明

plus.sqlite.executeSql不支持?占位符绑定,工具内部通过toSqlValue()手动拼接:

JS 类型SQL 输出示例
number原值25
boolean1/01
string单引号包裹,内部'转义为'''张三'
null/undefinedNULLNULL

查询结果注意事项

plus.sqlite.selectSql返回的是native 代理对象,Vue 模板无法直接读取属性。查询后需浅拷贝为纯 JS 对象:

constrows=awaitdb.selectAll('user')// 推荐:浅拷贝后赋值给 Vue datathis.list=rows.map(r=>({id:r.id,name:r.name,age:r.age}))

常见问题

-1402 Same Name Already Open

数据库已打开时重复调用openDatabase会报此错误。解决:先检查再打开。

constisOpen=awaitdb.isOpenDatabase('mydb.db')if(!isOpen){awaitdb.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
SQLexecuteSql,selectSql
CRUDinsert,insertBatch,update,remove,selectAll,selectOne,count
表结构createTable,dropTable
事务transaction

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询