indexDB 基础一把梭

126 阅读1分钟
//打开一个仓库 newindexDB为仓库名称 后面为版本号
let indexDB = window.indexedDB.open('newIndexDB', 1);
//打开成功的回调
indexDB.onsuccess = (res) => {
    let db = res.target.result;
    // 获取仓库 后面readwirte表示可读写 不写则只能读取
    let transaction = db.transaction(['customers'], 'readwrite');
    let obj = transaction.objectStore('customers');
    // 添加
    let request = obj.add({
        id: new Date().getTime(),
        name: '李四',
        age: 12,
        email: '317133022@qq.com'
    });
    // 添加成功的回调
    request.onsuccess = (res) => {

    };
    // 重复的获取仓库
    let store = db.transaction(['customers'], 'readwrite').objectStore('customers');
    //获取是根据主键来的 即keypath
    let obj_id = store.get(1682316992459);
    obj_id.onsuccess = (res) => {
       console.log(res.target.result)
    };
     
    // 更新数据 没有数据则新建
    let obj_update = store.put({ id: 222, name: 'acacac', age: 31313, email: '131313313022@qq.com' });
    obj_update.onsuccess = (res) => {
        console.log('更新:'+res);
        if (res.target.result) {
          console.log(res);
        }
    };
     
    // 删除数据
     let obj_del = store.delete(222);
     obj_del.onsuccess = (res) => {
         console.log('删除:'+res);
     };
    
    // 根据name来获取数据 
    let obj_get = store.index("name").get('李四');
    obj_get.onsuccess = (res) => {
        console.log('根据索引获取值:');
        console.log(res.target.result)
    };
     
    // 看不懂就百度去
    let obj_get = store.index("name"); 
    // 遍历数据 遍历 name为acacac的数据
    let obj_map = obj_get.openCursor(IDBKeyRange.only('acacac'));
    // 遍历所有数据
    // let obj_map = obj_get.openCursor();
    obj_map.onsuccess = (res) =>{
    let result_R = res.target.result
        if(result_R){
          console.log(result_R.value) 
          result_R.continue()
        }else{
          throw new Error("没有更多数据了")
        }
       }
    };
    
    indexDB.onerror = () => {
        console.log('打开数据库失败');
    };

//版本更新或者第一次创建时触发 0->1
indexDB.onupgradeneeded = (res) => {
    console.log(res);
    var db = res.target.result;

    if (!db.objectStoreNames.contains('customers')) {
        // 创建主键 和数据索引 unique 如果为true则代表索引值是唯一的 重复报错
        var target = db.createObjectStore('customers', {
          keyPath: 'id'
        });
        target.createIndex('name', 'name', { unique: false });
        console.log(target);
    }
    console.log(db);
};