接上一章:
//创建查询函数
function getDataByIndex(db, storeName) {
var tx = db.transaction(storeName);//获取查询事务
var store = tx.objectStore(storeName);//查询并获得表
var index = store.index("name_index");//获得索引
index.get("小B").onsuccess = function(e){//通过索引回调获得“小B”的信息对象
var stu = e.target.result;
console.info(stu.name + " " + stu.age + " " + stu.id);
};
var index_age = store.index("index_age");
index_age.get(18).onsuccess = function(e) {
//这里只能获取到第一个age为18的stu,虽然age索引不是唯一的,获得多个需要使用游标
var sudent = e.target.result;
};
}
//通过游标获取全部数据
function getAllData(db, storeName) {
var tx = db.transaction(storeName);
var store = tx.objectStore(storeName);
var c =store.openCursor();//打开游标
c.onsuccess = function(e) {//成功执行回调
var cursor = e.target.result;
if (cursor){//如果存在
console.log(cursor.key);//key是表的主键
var stu = cursor.value;
console.log(stu.name);
cursor.continue();//继续下一个
}
}
}
//index and cursor 索引和游标同时使用
function getData(db, storeName) {
var tx = db.transaction(storeName);
var store = tx.objectStore(storeName);
var index = store.index("index_age");
//打开游标,通过IDBKeyRange设置游标范围,这里设置为只获取age等于18的数据
var c = index.openCursor(IDBKeyRange.only(18));
c.onsuccess = function(e) {//成功执行回调
var cursor = e.target.result;
if (cursor){//如果存在
console.log(cursor.key);//key是表的主键
var stu = cursor.value;
console.log(stu.name);
cursor.continue();//继续下一个
}
}
}
//IDBKeyRange.only(val);只获取指定数据
//IDBKeyRange.lowerBuund(val, isOpened);获取在val以前或者小的数据,isOpened是开闭区间,false是包含val(闭区间),true是不包含val(开区间)
//IDBKeyRange.upperBuund(val, isOpened);获取在val以后或者大的数据,isOpened是值开闭区间,false是包含val(闭区间),true是不包含val(开区间)
//IDBKeyRange.buund(val1, val2, isOpened1, isOpened2);获取在value1与value2之间的数据,isOpened1和isOpened2分别是左右开闭区间