本文摘自PHP中文网,作者php中世界最好的语言,侵删。
这次给大家带来H5的本地存储之IndexedDB,使用H5本地存储IndexedDB的注意事项有哪些,下面就是实战案例,一起来看一下。IndexedDB 是一种低级API,用于客户端存储大量结构化数据(包括, 文件/ blobs)。该API使用索引来实现对该数据的高性能搜索。
最近有一项业务需求,就是可以离线存储数据,等到有网络信号的时候可以上传表单和图片。所以研究了一下HTML5的IndexedDB。
对于只存储某些字段的需求来说,可以使用Local Storage和 Session Storage来完成。但是一旦存储大量的数据,Local Storage和 Session Storage就远远不能满足需求了。这时,IndexedDB的强大之处就会体现出来了。
1、创建或者打开数据库
1 2 3 4 | const indexeddb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
const request = indexeddb.open(name, version);
|
因为indexedDB在不同的浏览器上有兼容性,所以我们需要些一个兼容函数来兼容indexedDB。
2、连接到数据库的回调函数
1 2 3 4 5 6 7 8 9 | request.addEventListener( 'success' , function (event){
}, false);
request.addEventListener( 'error' , function (event){
}, false);
request.addEventListener( 'upgradeneeded' , function (event){
}, false);
|
在连接到数据库后,request会监听三种状态:
success:打开或创建数据库成功
error:打开或创建数据库失败
upgradeneeded:更新数据库
upgradeneeded状态是在indexedDB创建新的数据库时和indexeddb.open(name, version) version(数据库版本号)发生变化时才能监听到此状态。当版本号不发生变化时,不会触发此状态。数据库的ObjectStore的创建、删除等都是在这个监听事件下执行的。
3、创建、删除ObjectStore
在indexedDB中,ObjectStore类似于数据库的表。
1 2 3 4 5 6 7 8 9 10 | request.addEventListener( 'upgradeneeded' , function (event){
const db = event.target.result;
db.close();
db.objectStoreNames.contains(objectStoreName);
db.deleteObjectStore(objectStoreName);
}, false);
|
可以用如下方法创建一个ObjectStore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | request.addEventListener( 'upgradeneeded' , function (event){
const db = event.target.result;
if (!db.objectStoreNames.contains(objectStoreName)){
const store = db.createObjectStore(objectStoreName, {
keyPath: keyPath
});
store.createIndex(name,
index,
{
unique: unique
});
}
}, false);
|
4、数据的增删改查
1 2 3 4 5 6 7 8 9 | request.addEventListener( 'success' , function (event){
const db = event.target.result;
db.transaction(objectStoreName, wa);
const store = transaction.objectStore(objectStoreName);
}, false);
|
数据库的增删改查:
1 2 3 4 5 6 7 8 9 10 11 12 13 | store.add(obj);
store.put(obj);
store. delete (value);
store.clear();
const g = store.get(value);
g.addEventListener( 'success' , function (event){
}, false);
|
按索引查找数据
1 2 3 4 5 6 7 8 9 | const index = store.index(indexName);
const cursor = index.openCursor(range);
cursor.addEventListener( 'success' , function (event){
const result = event.target.result;
if (result){
result.value
result. continue ();
}
}, false);
|
按索引的范围查找数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | const index = store.index(indexName);
const cursor = index.openCursor(range);
range = IDBKeyRange.lowerBound(value, true)
range = IDBKeyRange.lowerBound(value, false)
range = IDBKeyRange.upperBound(value, isOpen)
IDBKeyRange.bound(value1, value2, isOpen1, isOpen2)
|
最后,自己封装了一个indexedDB的库,可以参考一下:duan602728596/IndexedDB
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
H5文件异步上传
datalist输入框与后台数据库数据的动态匹配
以上就是H5的本地存储之IndexedDB的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
什么是html语义化?html语义化的好处(总结)
有关html5服务器推送事件的讲解
秀野堂html5入门视频教程的资源推荐
html5如何解决margin-top的塌陷问题(附代码)
html5中关于history模式的详解
html5实现留言板的代码实例分享
h5计算手机摇动次数
浅谈关于html5头部<meta>标签的小知识
html5的geolocation地理位置定位api使用方法详解
详细介绍html5元素及基本语法
更多相关阅读请进入《indexeddb》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » H5的本地存储之IndexedDB