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

<!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.οnerrοr=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 οnclick="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']进行索引才可以搜索到。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值