• Notes:indexedDB使用


    indexedDB是浏览器端保存结构化数据的一种数据库,类似于mysql,oracle等数据库,但indexedDB使用对象存储数据,而不是用表。

    indexedDB是全局的宿主对象,使用window.indexedDB即可调用。

    要使用indexDB数据库,首先得打开它,使用open方法,可以给该方法指定数据库名与版本号,如该数据库存在则发送一个打开它的请求,如不存在则创建一个数据库并打开它的请求。该方法返回一个IDBRequest对象

    var request = indexedDB.open('1yyg',1),
            db = null;
        request.onerror = function(e){
            console.log(e);
        };
        request.onsuccess = function(e){
            db = this.result;  
        }
        request.onupgradeneeded=function(e){
            db = this.result;
            if(!db.objectStoreNames.contains('users')){
                var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
                users.forEach(function(ele,idx,arr){
                    usrObjStr.add(ele);
                });
            }
        }

    传递版本号时不能低于当前的版本号,否则报错;大于当前版本号时则会触发upgradeneeded事件。

    删除数据库,使用deleteDatabase方法,该方法也是返回一个IDBRequest对象,监听该对象的error和success事件便可知道删除是否成功

    var delRequest = window.indexedDB.deleteDatabase('1yyg');
        
        delRequest.onerror = function(e){
            console.log('delete failure');
        };
    
        delRequest.onsuccess = function(e){
            console.log('delete successfully');
        };

    IDBRequest对象有一个result属性,该属性保存着IDBDatabase对象的引用,有了该对象就可以对数据库进行CURD操作了。

    1、创建存储空间出,类似于表的概念,,使用createObejctStore必须在versionchange transaction时使用:

    var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
    //使用createObjectStore创建存储空间时,需要指定一个keyPath,该值是空间中将要保存的对象的一个属性,而这个属性将作为
    存储空间的键来使用。

    2、检查某个存储空间是否存在

    db.objectStoreNames.contains('users');
    //使用objectStoreNames获取当前数据库的所有存储空间的名字

    3、删除存储空间,使用deleteObejctStore必须在versionchange transaction时使用

    request.onupgradeneeded=function(e){
            db = this.result;
            if(!db.objectStoreNames.contains('users')){
                var usrObjStr = db.createObjectStore('users',{keyPath:'id',autoIncrement:!0});
                users.forEach(function(ele,idx,arr){
                    usrObjStr.add(ele);
                });
            }
            db.deleteObjectStore('users');
        }

    4、使用IDBObjectStore对象进行数据插入、查询、删除等操作,都是基于IDBDatabase对象的transaction来做的,首先得使用transaction方法得到IDBTransaction对象,接着使用该对象的obejctStore方法获取具体存储空间的IDBObjectStore对象,然后

    就可以进行各种操作了。

    查询数据,

    var keyBound = IDBKeyRange.lowerBound(1,!0)
    var transaction = db.transaction(['users'],'readwrite');
    //transaction方法第一个参数是指定objectStoreName,可以使用数组指定多个,也可以直接使用字符串只指定一个,第二个参数是事务的模式,有 readonlyreadwrite等
    var usrObjStr = transaction.objectStore('users'); //使用objectStore方法选中具体的存储空间 var resRequest = usrObjStr.get(keyBound); resRequest.onsuccess = function(e){ console.log(resRequest.result); }

    添加数据,使用add和put方法,区别的是添加重复数据时,前者报错,后者重写

    var resRequest = usrObjStr.add({name:'nihaoma',age:20});
            resRequest.onsuccess = function(e){
                console.log(resRequest.result);
            }
            resRequest.onerror = function(e){
                console.log('fail');
            }

    删除数据,删除id大于1的所有数据

        var keyBound = IDBKeyRange.lowerBound(1,!0)
            var transaction = db.transaction(['users'],'readwrite');
            var usrObjStr = transaction.objectStore('users');
    
            var resRequest = usrObjStr.delete(keyBound);
            resRequest.onsuccess = function(e){
                console.log('delete success');
            }

    删除所有数据可以使用clear方法

            var transaction = db.transaction(['users'],'readwrite');
            var usrObjStr = transaction.objectStore('users');
    
            var resRequest = usrObjStr.clear();
            resRequest.onsuccess = function(e){
                console.log(resRequest.result);
            }

    统计所有记录条数,使用count方法

    var transaction = db.transaction(['users'],'readwrite');
            var usrObjStr = transaction.objectStore('users');
    
            var resRequest = usrObjStr.count();
            resRequest.onsuccess = function(e){
                console.log(resRequest.result);
            }

    使用游标查询,使用openCursor方法,

    var transaction = db.transaction("name", "readonly");
    var objectStore = transaction.objectStore("name");
    var request = objectStore.openCursor();
    request.onsuccess = function(event) {
      var cursor = event.target.result;
      if(cursor) {
        console.log(cursor.value);
        cursor.continue();
      } else {
        // no more results
      }
    };
  • 相关阅读:
    PHP $_SERVER 变量
    $_SERVER变量 以及 PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
    Funs
    搞定,务必记得要以最简便的整合资源来做
    还是要好好研究开源的php
    重回编程
    登录弹窗代码(居中)
    测试工具了解指南
    工作总结1
    HTML5 contextmenu隐藏鼠标右键菜单
  • 原文地址:https://www.cnblogs.com/zmxmumu/p/6047751.html
Copyright © 2020-2023  润新知