indexedDB简单使用

本文介绍了如何使用JavaScript的IndexedDBAPI进行数据库操作,包括打开数据库、创建表、插入、查询、更新和删除数据,以及处理错误情况。
摘要由CSDN通过智能技术生成

let db;

// 打开indexedDB
export function openDB(dbName, version) {
  return new Promise((resolve, reject) => {
    let indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
    // 打开数据库,没有就创建
    let request = indexedDB.open(dbName, version);
    // 失败回调
    request.onerror = function (event) {
      console.error('IndexedDB 打开失败');
      reject()
    }
    // 成功回调
    request.onsuccess = function (event) {
      db = request.result;
      resolve(db)
    }
    // 更新回调
    request.onupgradeneeded = function (event) {
      db = request.result;
      // 创建表(imgs),定义主键id
      let objStore = db.createObjectStore('imgs', { keyPath: 'itemId' });
      // 创建索引
      objStore.createIndex('itemId', 'itemId', { unique: true });
    }
  })
}

// 插入数据
export function addData(storeName, data) {
  var request = db.transaction([storeName], 'readwrite') // 事务对象,指定表名和操作模式("只读"或"读写")
    .objectStore(storeName) // 仓库对象
    .add(data); // 插入数据

  request.onsuccess = function (event) {
    console.log('数据插入成功');
  }

  request.onerror = function (event) {
    console.error('数据插入失败');
  }

}

// 查询全部数据
export function getAllData(storeName) {
  return new Promise((resolve, reject) => {
    var request = db.transaction([storeName]).objectStore(storeName).getAll();

    request.onsuccess = function (event) {
      var result = request.result;
      resolve(result)
      console.log('获取全部数据成功', result);
    }

    request.onerror = function (event) {
      reject(false)
      console.error('获取全部数据失败');
    }
  })
}

// 通过主键查询数据
export function getDataByKey(storeName, key) {
  return new Promise((resolve, reject) => {
    var request = db.transaction([storeName]).objectStore(storeName).get(key);

    request.onsuccess = function (event) {
      var result = request.result;
      resolve(result)
      console.log('查询数据成功', result);
    }

    request.onerror = function (event) {
      reject(false)
      console.error('查询数据失败');
    }
  })
}

// 通过游标查询数据
export function getDataByCursor(storeName, range) {
  return new Promise((resolve, reject) => {
    var request = db.transaction([storeName]).objectStore(storeName).openCursor(range);
    let list = []
    // 开启游标成功,逐行读数据
    request.onsuccess = function (event) {
      var cursor = event.targer.result;
      if (cursor) {
        list.push(cursor.value);
        cursor.continue();  // 遍历储存对象所有内容
      } else {
        return list
      }
    }

  })
}

// 更新数据, 根据主键判断,存在就更新,不存在就添加
export function updateData(storeName, data) {
  console.log('更新数据', data);
  var request = db.transaction([storeName], 'readwrite').objectStore(storeName).put(data);

  request.onsuccess = function (event) {
    console.log('更新成功');
  }

  request.onerror = function (event) {
    console.error('更新失败');
  }
}

// 通过主键id删除数据
export function deleteData(storeName, id) {
  var request = db.transaction([storeName], 'readwrite').objectStore(storeName).delete(id);

  request.onsuccess = function (event) {
    console.log('删除数据成功');
  }

  request.onerror = function (event) {
    console.error('删除数据失败');
  }
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值