1. IndexedDB 允许储存大量数据,提供查找接口,建立索引。
2.不支持 SQL 查询语句
3. 数据存取异步实现
4. 同源限制
5. 支持二进制存储(比如图片base64)
http://www.ruanyifeng.com/blog/2018/07/indexeddb.html
https://wangdoc.com/javascript/bom/indexeddb.html
1. 多索引查询查询单条数据
var connect_DB = db.transaction(['indexedDB表名']);var affair_Object = connect_DB.objectStore('indexedDB表名');//可以多加几个索引参数,实现多索引查询var index = affair_Object.index('索引1','索引2');//选择表索引名var result=index.get('索引1的值','索引2的值');//找出匹配索引值的所有记录result.onerror = function(e) { console.log('事务失败');};result.onsuccess = function(e) { var outcome = e.target.result; if (outcome) { console.log(outcome) } else { console.log("没有记录") }};
2. 游标查询–对索引进行范围内查询(单一索引)
var transaction = db.transaction(['表名'], 'readonly');//创建事务var objectStore = transaction.objectStore('表名');//获取对象仓库//IDBIndex 对象var myIndex = objectStore.index('索引名');//获取 IDBIndex 对象。var keyRangeValue = IDBKeyRange.bound(13,15);//该索引的值在13-15之间myIndex.openCursor(keyRangeValue).onsuccess = function(e) { var cursor = e.target.result; if (cursor) {//会不断循环遍历直到执行else console.log(cursor.value);//每条数据的值 console.log(cursor.key);//这里的值就是索引old(objectStore.index('old');)的值 cursor.continue(); } else { console.log('查询完毕.'); }};
3. 查询某主键范围内的值
比如要查询主键值在5-15内的数据
var keyRangeValue = IDBKeyRange.bound(1, 14);//获取1-14之间的主键值的记录var connect_DB=db.transaction(['表名'], 'readonly');//创建事务var affair_Object=connect_DB.objectStore('表名');//获取对象仓库affair_Object.openCursor(keyRangeValue).onsuccess = function(e) { var cursor = e.target.result; console.log(cursor); if (cursor) {//会不断循环遍历直到执行else console.log(cursor.value);//每条数据的值 console.log(cursor.key);//每条数据的主键值 cursor.continue();//使用该函数才可以使游标移动到下一位,否则只有一条数据 //cursor.continue();等价于cursor.advance(1); } else { console.log('查询完毕.'); }};