【发布时间】:2016-08-31 12:31:13
【问题描述】:
我想执行这个查询 select * from properties where propertyCode IN ("field1", "field2", "field3")
如何在 IndexedDB 中实现这一点 我试过这个东西
getData : function (indexName, params, objectStoreName) {
var defer = $q.defer(),
db, transaction, index, cursorRequest, request, objectStore, resultSet, dataList = [];
request = indexedDB.open('test');
request.onsuccess = function (event) {
db = request.result;
transaction = db.transaction(objectStoreName);
objectStore = transaction.objectStore(objectStoreName);
index = objectStore.index(indexName);
cursorRequest = index.openCursor(IDBKeyRange.only(params));
cursorRequest.onsuccess = function () {
resultSet = cursorRequest.result;
if(resultSet){
dataList.push(resultSet.value);
resultSet.continue();
}
else{
console.log(dataList);
defer.resolve(dataList);
}
};
cursorRequest.onerror = function (event) {
console.log('Error while opening cursor');
}
}
request.onerror = function (event) {
console.log('Not able to get access to DB in executeQuery');
}
return defer.promise;
但是没有用。我尝试了谷歌,但找不到确切的答案。
【问题讨论】:
-
什么是objectStore?以及你定义它的地方
-
我已经更新了代码..请检查
-
你传递的参数是什么? IDBKeyRange.only() 产生一个只跨越一个键的范围。所以这个游标只会产生一条记录。如果您打算将参数作为要获取的键列表,您可以简单地遍历参数并为每个参数发出一个 get()。
-
如何迭代列表?你能写一个示例代码吗?
标签: javascript range indexeddb