入门indexedDB

概念:

IndexedDB 是一种基于浏览器的 NoSQL 数据库,用于在客户端持久化存储大量结构化数据。

特点:

以键值对形式存储;

键一般为字符串属性,值可以支持大多类型;

操作是异步的,不阻塞主线程;

可以建立索引,加快查询速度;

数据持久化存储,除非手动删除或清除缓存,并且可以离线访问;

相关API:

以代码形式介绍,主要以介绍API为主,不考虑代码是否错误,主要问题在变量的定义和参数上

//1.打开或创建一个数据库
const request = indexedDB.open('databaseName', version);//数据库名,版本号,版本号只能增加不能减小,且为整数

//2.当数据库被创建或版本号修改后被调用,注意:创建/删除表和索引的时候都需要在这里,意味着只有修改版本号才能进行该操作
request.onupgradeneeded=function(e){
    const db=e.target.result
    //3.创建对象存储,类似数据库中的表
    const objectStore=db.createObjectStore('storeName',{keyPath:"id",autoIncrement:true})//第一个参数为表名,字符串。第二个参数为对象,有两个参数:keyPath指定主键名,这里是id;autoIncrement表示如果不给每条数据手动设置主键信息,主键是否自动递增,默认为false,不递增。注:如果autoIncrement设置为false,则添加数据时必须手动添加主键值,且主键值为数字形式
    //4.创建索引,加快查询速度
    objectStore.createIndex('index','index',{unique:false})//第一个参数索引名,任意字符串;第二个参数,要建立索引的属性,必须要在表中,值为字符串或数组,分别表示建立单索引或联合索引;第三个参数:对象,常用属性:unique:第二个参数中的属性是否为唯一值;multiEntry:当第二个参数中属性的值为数组时,是否对数组中每个元素建立单独的索引。
}

//5.当数据库打开成功后调用
request.onsuccess=function(e){
    console.log('打开成功')
    const db = e.target.result
    //6.开始进行事务的操作,获取想要操作的表
    const transaction=db.transaction(StoreName,'readwrite/readonly')//第一个参数可以是字符串数组或者字符串,当为数组时,表示想要同时操作多张表;当为字符串时表示只操作某一张表。第二个参数是字符串,值为readwrite(可读写)或readonly(只读),若设置为只读,则不可增删改,只能查
    //7.对指定表进行操作
    const st=transaction.objectStore(storeName)//参数为上一步第一个参数中涉及到的表名
    //操作表中数据,此处演示所有内容,没考虑是否报错
    //8.增加
    let req=st.add({key1:val1,key2:val2})//值必须为对象
    //9.删除
    let req=st.delete(id)//值为需要删除的主键值,就是在第三个API中keyPath的属性值,这里是id
    //10.修改
    let req=st.put({key1:val1,key2:val2})//值为对象,同增加,当有对应主键内容时进行修改,没有的话则添加
    //11.查询
    let req=st.get(id)//值为需要查询的主键值,就是在第三个API中keyPath的属性值,这里是id
    //12.操作成功查询,增删改查都可用
    req.onsuccess=function(){
        console.log('操作成功')
    }
    //13.操作失败查询,增删改查都可用
    req.onerror=function(){
        console.log('操作失败')
    }
    //使用索引查询数据
    //14.获取索引
    let ind=st.index('索引名')//参数为创建索引时的第一个参数,表示要使用该索引进行查询
    //15.根据索引的值查询内容
    let req=ind.get(val)//参数为设置索引时第二个参数的值,若设置时第二个参数为数组,则这里面也是数组,属性值的顺序要和设置索引时的顺序相同,不能少
}

注意:

1.在API介绍中有两种查询方式:索引查询和使用主键查询。

索引查询:

        必须要先设置索引;

        适合只知道值,数据库中所有这个值的内容;

        可以唯一也可以重复(查第一个使用get,查所有使用getAll(‘需要查询的值’,查询条数),第二个参数不写默认查询所有);

主键查询:

        在创建表时就设置好了;

        适用于知道主键要查本条数据;

        一定是唯一值;

最后:

本文只讲了基础API,如果想要分页或者排序的话可以使用游标实现,这里就先不说了。

欢迎对indexedDB有更多了解的大佬在评论区提出问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值