<!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']进行索引才可以搜索到。
下一篇开始进行增删改查的操作。