前端数据存储方式之indexedDB

来源:sunqy1995 发布时间:2019-03-28 14:11:21 阅读量:1278

简介

前端从发展到现在已经形成了一定的浏览器存储数据的方式,有cookiesessionStoragelocalStorageindexedDB以及被废弃的web sql.

特点:

 

键值对存储 每一条数据有一个主键,主键独一无二,实行key-value进行存储。

异步操作 实行异步操作。

支持事务 支持事务操作意味着数据操作只有成功和失败两种状态。

同源策略 每一个数据库对应创建它的域名,只能访问自身域名下的数据库。

存储空间大 支持大于250M的数据,甚至没有上限

支持二进制存储 可以存储二进制数据。

数据库操作

数据库连接与创建数据库

使用window对象indexedDB属性的open()方法,其中第一个参数是数据库名称,如果存在就打开数据库不存在就创建。第二个参数是数据库的版本是大于0的正整数。

数据库打开时,会触发4中事件:

success: 打开成功。

error: 打开失败

upgradeneeded: 第一次打开该数据库,或者数据库版本发生变化时触发。

blocked: 上一次的数据库连接还未关闭

注意:第一次打开数据库时,会先触发upgradeneeded事件,然后触发success事件。

 

let  request = indexedDB.open(name, 1);

request.onsuccess = function(e){

  db = e.target.result;

}

创建"对象仓库"

使用createObjectStore()进行对象仓库的创建。

 

第一个参数是仓库名称,同一个数据库中不可以重复。

第二个参数是一个对象,包含keyPathautoIncrement,分别表示每条记录的键名和是否使用自动递增的整数作为键名,默认为false

db.createObjectStore(name[,options]);

//一般创建仓库都在upgradeneeded事件中

        request.addEventListener('upgradeneeded', e => {

            db = e.target.result;

            if(!db.objectStoreNames.contains('person')){

                let store = db.createObjectStore(table, {keyPath: 'keyword', autoIncrement: false});

            }

事务的操作

indexedDB支持事务操作,事务就是说在对数据库的操作只有成功和失败这两种可能,所以说在进行数据库的操作之前需要先创建事务。

 

name是要操作的仓库的名称

readwrite是对仓库进行什么操作

const tx = db.transaction(name, 'readwrite');

1

新增操作

indexedDB数据库也可以进行添加数据的操作,需要先添加事务,使用add进行添加,但是如果是相同的就会操作失败。还可以使用链式调用,indexedDB操作时异步操作,所以需要进行监听事件监听成功和失败。

 

const tx = db.transaction('name', 'readwrite');

const store = tx.objectStore('name');

const add = store.add({keyword:'table',s:0});

add.addEventListener('success', e => {

      console.log('操作成功');

})

add.addEventListener('error', e => {

        console.log('操作失败');

})

更新数据

如果想添加相同的数据可以使用put方法

 

const tx = db.transaction('name', 'readwrite');

const store = tx.objectStore('name');

const add = store.put({keyword:'table',s:0});

add.addEventListener('success', e => {

      console.log('操作成功');

})

add.addEventListener('error', e => {

        console.log('操作失败');

})

获取数据

使用get方法,通过key值获得该值。

 

const get = db.transaction('name','readwrite')

.objectStore('name')

 .get('keyword');

删除数据

使用delete方法,通过key值进行删除

 

const get = db.transaction('name','readwrite')

.objectStore('name')

 .delete('keyword');

游标的使用

indexedDB有一种游标操作,从仓库的第一条开始一直遍历到最后一条,使用openCursor创建,使用continue,result就是仓库中的所有数据。

 

const cursor = db.transaction('users').objectStore('users').openCursor();

cursor.addEventListener('success',e=>{

      let result = e.target.result;

       if(result){

            console.log('cursor',result);

             cursor.continue();//可以将地址指针指向下一个地址。

         }else{

               console.log('遍历完成',result);

        }

})


标签: PHP 环境搭建
分享:
评论:
你还没有登录,请先