更新记录
1.1.0(2025-06-11) 下载此版本
添加app端支持
1.0.0(2025-06-05) 下载此版本
添加indexdb支持
平台兼容性
uni-app(4.02)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | - | √ | √ | √ | - | - | - | - |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | - | × | × | × | × |
uni-app x(4.63)
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
√ | √ | 5.0 | 12 | - | × |
其他
多语言 | 暗黑模式 | 宽屏模式 |
---|---|---|
× | × | √ |
rookie-sqlite-plugin
初始化
在 web 环境和 app 环境请使用不同的方式初始化数据库对象
web
1、请使用 new IndexedDB(dbName, version) 创建数据库对象 dbName数据库名称 version数据库版本,如果高于上一个版本会触发升级
2、然后调用 initialize 方法初始化表对象 initialize(storeConfigs, onUpgradeCallback) 首次会创建所有的表空间。 storeConfigs:表配置,设置主键的自增方式和表名 示例数据:
const storeConfigs = [
{
storeName: 'users',
options: {keyPath: 'id', autoIncrement: true},
indexes: [
{
indexName: "age", keyPath: "age", indexOptions: {unique: false}
},
{
indexName: "name", keyPath: "name", indexOptions: {unique: false}
}
]
}
]
onUpgradeCallback:升级方法,触发升级的时候去修改各种配置索引之类的
3、打开数据库
第一步创建了对象dbHandle,然后使用dbHandle.open()去打开数据库。
数据查询
const wrap = new IndexDBQueryWrapper(dbHandle.db, "users")
查询列表数据
wrap.eq('age', 100).list().then(user => console.log('用户:', user));
支持eq(等于)、gt(大于)、lt(小于)、in(在列表)、gte(大于等于)、lte(小于等于) 支持多个方法拼接
or的使用
wrap.or([
{eq: ['age', 200]},
{eq: ['age', 100]},
]).list().then(user => console.log('用户:', user));
查询单条数据
const wrap = new IndexDBQueryWrapper(dbHandle.db, "users")
wrap.getById("age",200).then(user => console.log('用户:', user));
支持 getById(id) 通过主键ID查询,getByIndex(indexName, key) 通过索引名称查询,如果索引名称存在多条数据也只会返回单条数据
数据添加
通过调用 dbHandle.add(storeName, data)去添加数据。
实例:
dbHandle.add("users",{
age: 200,
name: "哈3哈哈"
}).then((res) => {
console.log(res);
}).catch((err) => {
console.log(err);
})
如果添加成功会返回id
更新数据
const wrap = new IndexDBQueryWrapper(this.$store.state.dbHandle.db, "users")
wrap.eq("age",100).update({"age":1000}).then(data => console.log('数据:', data));
删除数据
const wrap = new IndexDBQueryWrapper(this.$store.state.dbHandle.db, "users")
wrap.eq("age", 200).remove().then(data => console.log('数据:', data));
===================
APP
初始化
在 app端需要去创建 PlusDB 对象。 new PlusDB('test', 1, initSql, onUpgradeCallback);
test 是数据库名 1 是数据库的版本号,数字增加则会触发数据库的升级操作
initSql 则是初始化表的 sql 。例如:
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
nickname TEXT,
age INTEGER,
email TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME
);
类型是字符串数组类型。
onUpgradeCallback 则是触发的升级回调,可以使用当前方法去修改表、迁移数据等。 回调参数有三个,第一个是当前数据库的版本号,第二是传递进去的版本号,第三个是数据库对象。
初始化完后就可以使用数据库对象去打开数据库了。
dbHandle.open()
查询数据
查询使用 QueryWrapper 去构建查询参数。
const wrapper = new QueryWrapper('users', dbHandle);
需要传递表名和数据库对象进去。
工具类支持 eq【等于】、ne【不等于】、gt【大于】、ge【大于等于】、lt【小于】、le【小于等于】、between、notBetween、like、notLike、likeLeft、likeRight、notLikeLeft、notLikeRight
isNull、in、notIn、groupBy、orderByAsc、orderByDesc、select、last、and、or。
都是支持链式调用,只需要在最后调用 exec();方法就会去执行sql了。
const result = await wrapper
.select('id', 'username', 'email')
.eq('age', 18)
.exec();
还有一个 selectOne 方法,返回一条数据。
添加数据
直接调用数据库对象的 insert 和 insertBatch 方法。
都是两个参数,第一个参数是表名,第二个参数是需要插入的数据。
const id = await db.insert({ name: 'Alice', age: 25 });
db.insertBatch([
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 28 }
]);
同时还支持事务操作,里面支持增删改查操作:
db.executeInTransaction(async (db) => {
await db.insert({ name: 'David', age: 22 });
await db.insert({ name: 'Eve', age: 24 });
});
更新数据
更新使用 UpdateWrapper 对象去构建更新 SQL:
和查询支持的方法一致,只不过增加了一个 set 方法去更新数据。
还支持通过主键去更新数据。 db.updateById(tableName, data, idField = 'id')
删除数据
删除则使用 DeleteWrapper 对象构建 SQL,也是和查询支持的方法类似。
支持通过主键ID去删除数据 db.deleteById(tableName, id, idField = 'id')
在constant文件中可以修改SQL日志是否打印的参数