JS中IndexedDB的部分使用

IndexedDB就是一个数据库,它最大的特色是使用对象保存数据,而不是使用表来保存数据。

//用promise包裹查询当前版本号的代码,然后将当前版本号加一后打开数据库,并创建数据表
function createTable(dbName,tableName,keyName){
    var version;
    //获取当前的版本号
    function getVersion(){
        return new Promise(function(resolve){
            //打开数据库
            var request=indexedDB.open(dbName);
            //数据库成功打开时触发onsuccess事件
            request.onsuccess=function(event){
                version=event.target.result.version;
                resolve(version);
            }
        });
    }
    //利用获取到的版本号,创建一个新的对象存储空间(改变数据库结构时需要更新版本号)
    getVersion().then(res=>{
        var request=indexedDB.open(dbName,res+1);
        //更新数据库时触发的事件
        request.onupgradeneeded=function(event){
            var db=event.target.result;
            //创建数据表,keyName作为键
            db.createObjectStore(tableName,{keyPath:keyName});
        };
    });         
}
// createTable("mydb","table4","id");


//向对象空间(数据表)中添加数据
function addData(dbName,tableName,data){
    var request=indexedDB.open(dbName);
    request.onsuccess=function(){
        var db=request.result;
        //创建读写事务
        var transaction=db.transaction(tableName,"readwrite");
        //打开对象存储空间(数据表)
        var objStore=transaction.objectStore(tableName);
        //向对象存储空间中添加数据
        objStore.add(data);
    }
}
// addData("mydb","table1",{"id":2,"name":"wangwu","age":25});


//从对象空间中获取数据(因为异步,所以不知道怎么return返回数据,所以使用了回调函数)
function getData(dbName,tableName,keyVal,callback){
    var request=indexedDB.open(dbName);
    request.onsuccess=function(){
        var db=request.result;
        var transaction=db.transaction(tableName,"readonly");
        var objStore=transaction.objectStore(tableName);
        //从对象存储空间中读取数据
        var result=objStore.get(keyVal);
        //当成功读取数据时触发
        result.onsuccess=function(){                    
            callback(result.result);
        };
    };
}
// var data;
// getData("mydb","table1",0,function(res){data=res;});
// setTimeout(function(){
//  console.log(data);
// },1000);


//通过游标遍历对象空间中的数据
function getAllDataByCursor(dbName,tableName){
    var request=indexedDB.open(dbName);
    request.onsuccess=function(event){
        var db=event.target.result;
        var transaction=db.transaction(tableName,"readonly");
        var objStore=transaction.objectStore(tableName);
        //创建一个游标
        var cursor=objStore.openCursor();
        //成功创建游标时触发
        cursor.onsuccess=function(event){
            //获取数据
            var data=event.target.result;
            if(data!==null){
                console.log(data.value);
                //将游标向下移
                data.continue();
            }
        }
    }
}
getAllDataByCursor("mydb","table1");

你可能感兴趣的:(JS中IndexedDB的部分使用)