H5本地存储-indexedDB数据库(三)创建对象索引

来源:互联网 发布:生化奇兵3:无限知乎 编辑:程序博客网 时间:2024/05/22 17:40
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>创建对象索引</title>    <script>        window.indexedDB=window.indexedDB || window.webkitIndexedDB|| window.mozIndexedDB||window.msIndexedDB;        window.IDBTransaction=window.IDBTransaction||window.webkitIDBTransaction||window.msIDBTransaction;        window.IDBKeyRange=window.IDBKeyRange||window.webkitIDBKeyRange||window.msIDBKeyRange;        window.IDBCursor=window.IDBCursor||window.webkitIDBCursor||window.msIDBCursor;        function createObjectStore() {            var dbName='indexedDBTest';            var dbVersion=20170914;            var idb;            var dbConnect=indexedDB.open(dbName,dbVersion);            dbConnect.onsuccess=function (e) {                idb=e.target.result;                alert("OK");            };            dbConnect.onerror=function () {                alert("error");            };            //当前版本高于上一版本才能执行这句话            dbConnect.onupgradeneeded=function (e) {                idb=e.target.result;                var tx=e.target.transaction;                var name='newUsers';                //keypath是主键,在一个对象仓库中只能有一个主键,但是主键是可以重复的,                //keypath指定每一条记录使用那一属性值作为主键                var OptionalParameters={                    keyPath:'userId',                    autoIncrement:false  //是否为自增主键值,如果这里设置为false,那么需要显式添加主键值。                }                //创建对象仓库                var store=idb.createObjectStore(name,OptionalParameters); //返回一个IDBObject对象,创建成功的对象仓库                alert("createObjectStore OK!")                var name='userNameIndex';                var keyPath='userName';                var OptionalParameters={                    unique:false, //同一个对象仓库中两个数据的索引不能相同                    multiEntry:false// false只能讲数组整体添加到索引  true索引值为一个数组,可将每一个元素添加到索引                }                var idx=store.createIndex(name,keyPath,OptionalParameters);//索引名字,对数据仓库中对象那个属性创建索引,                alert("index OK");            };        }    </script></head><body><button onclick="createObjectStore()">创建数据库对象</button></body></html>

 在这里解释一下索引的multiEntry属性值

当我们有一个对象

{id:300,name:'lilei',sex:'m',like:['football','basketball','jump']}

在like属性中,疾苦的是一个数组,如果在关系型数据库中,需要另外建一张表,在indexedDB中,不许要另外建立数据仓库,直接设置属性存储即可

如果将multiEntry属性设置为true,我们对football,basketball,jump进行索引,都可以找到这条记录。而设置为false,则需要对:['football','basketball','jump']进行索引才可以搜索到。


下一篇开始进行增删改查的操作。

原创粉丝点击