更新记录

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日志是否打印的参数

隐私、权限声明

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

app端,sqlite

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

插件不采集任何数据

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

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问