1.介绍
Indexed Database API,简称为IndexedDB,是在浏览器中保存结构化数据的一种数据库。允许存储大量数据,提供查找接口,还能建立索引。所涉及的操作完全是异步进行的。
2.特点
。键值对存储:IndexedDB内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括JavaScript对象。对象仓库中,数据以“键值对”的形式保存,每一个数据记录都有对应的主键,主键是独一无二的,不能有重复,否则会抛出一个错误。
。异步:IndexedDB操作是不会锁死浏览器,用户依然可以进行其他操作,这与LocalStorage形成对比,后者的操作是同步的,异步设计是为了防止大量数据的读写,拖慢网页的表现。
。支持事务:IndexedDB支持事务(transaction),这意味着一系列操作不走之中,只要有一步失败,整个事务就都取消,数据库回滚到事务发生之前的状态,不存在只改写一部分数据的情况。
。同源策略:IndexedDB受到同源限制,每一个数据库对应创建它的域名,网页只能访问自身域名下的数据库,而不能访问跨域的数据库。
。存储空间大:IndexedDB的存储空间比LocalStorage大得多,一般来说不少于250M,甚至没有上线。
。支持二进制存储:IndexedDB不仅可以存储字符春,还可以存储二进制数据(ArraryBuffer对象和Blob对象)。
3.基本概念
•数据库:IDBDatabase 对象
•对象仓库:IDBObjectStore 对象
•索引: IDBIndex 对象
•事务: IDBTransaction 对象
•操作请求:IDBRequest 对象
•指针: IDBCursor 对象
•主键集合:IDBKeyRange 对象
4.操作流程
1.打开数据库:包含两个参数,第一个参数是字符串,表示数据库的名称;第二个参数的正数,标书数据库的版本

2.新建数据库:新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。不同之处在于后续的操作主要在upgradenneeded时间的监听函数里面完成,因为这时版本从无到右,所以会出发这个事件。通常,新建数据库以后第一件事是新建对象仓库(即新建表)

3.新增数据:向对象仓库写入数据,这需要事务来完成

4.读取数据:也是通过事务来完成

5.修改数据

6.删除数据

7.遍历数据:遍历表格的所有数据,需要continue()才能遍历到下一条数据

8.索引:索引的意义在于,可以让你搜索任意字段,也就是说从任意字段拿到数据记录。如果不建立索引,默认只能搜索主键(即从主键取值)

网友评论