indexedDB使用

/*
 * @Description: indexedDB 接口数据缓存: 创建、增删改查
 * @Author: linlianqiang
 * @Date: 2021-08-20 11:36:13
 * @LastEditTime: 2021-08-20 15:18:35
 * @LastEditors: linlianqiang
 */
const configDB = {
  name: 'CocosWebDb', // 数据库名
  version: 1, // 数据库版本号
  db: null,
  ojstore: {
    name: 'Users', // 存储空间表的名字
    keypath: 'id', // 主键
    indexKey: 'age' // 年龄索引
  }
};
export const webDB = {
  indexedDB: window.indexedDB || window.webkitindexedDB,
  /**
   * 打开或创建数据库, 建立对象存储空间ObjectStore
   * @param {string} dbName
   * @param {number} dbVersion
   */
  initDB(dbName, dbVersion) {
    const that = this;
    let version = dbVersion || 1;
    const request = that.indexedDB.open(dbName, version);
    request.addEventListener('success', e => {
      console.log('连接成功', e);
    });
    request.addEventListener('error', e => {
      console.log('连接失败', e);
    });
    // 创建对象仓库
    request.addEventListener('upgradeneeded', e => {
      const db = e.target.result;
      // 判断是否存在
      if (!db.objectStoreNames.contains(configDB.ojstore.name)) {
        const store = db.createObjectStore(configDB.ojstore.name, {
          keyPath: configDB.ojstore.keypath,
          autoIncrement: false // 自增
        });
        console.log('创建仓库成功', store);
      }
    });
  },
  /**
   * 添加数据
   * @param {object} 数据库
   * @param {string} 表名
   * @param {*} 添加的数据
   */
  addData(db, storename, data) {
    const tx = db.transaction(storename, 'readwrite');
    const store = tx.objectStore('Users');
    let req;
    data.forEach(item => {
      req = store.add(item);
      req.onerror = () => {
        console.error('add添加数据库中已有该数据');
      };
    });
  },
  /**
   * 删除数据库
   * @param {stirng} dbname
   */
  deleteDB(dbname) {
    const that = this;
    that.indexedDB.deleteDatabase(dbname);
  },
  /**
   * 关闭数据库
   * @param {object} db
   */
  closeDB(db) {
    db.close();
  }
};
posted @ 2021-08-23 10:30  毛栗的demo  阅读(72)  评论(0)    收藏  举报